我的数据框
set.seed(1)
df <- data_frame(col1 = c(1:49), col2 = sample(c(0:20), 49, replace = T))
我的清单
fields <- list(A = c(2:4, 12:16, 24:28, 36:40, 48:49),
B = c(6:10, 18:22, 30:34, 42:46))
我希望创建一个新的列,其中包含fields中向量对象的名称,该向量包含df $ col1中的数字
我已经针对fields创建了一个条件for循环:
col1 <- df$col1
for (i in col1) {
if (col1[i] %in% fields[[1]] == T) {
col1[i] <- names(fields)[1]
} else if (col1[i] %in% fields[[2]] == T) {
col1[i] <- names(fields)[2]
}
}
虽然这种方法可以实现目标,我可以将得到的新向量col1分配给我的数据框,但是这对我来说似乎不太有效率,特别是因为我还有包含更多对象的列表。 我想要这样做的原因:我希望使用ggplot和dplyr根据它们在我的列表(fields,以及其他列表)中的位置对观察结果进行分组和汇总。希望我的问题已经表述清楚了。谢谢! 编辑 我创建了一个更通用的函数,其中包含一个嵌套的for循环。
find_object <- function(x, list) {
for (j in 1:length(list)) {
for (i in 1:length(x)) {
if (x[i] %in% list[[j]] == TRUE) {
x[i] <- names(list)[j]
}
}
}
x
}
find_object(col1, fields)
这大致是我想要的-但这是一个嵌套的for循环,我听说这样做是不好的...有没有更好的解决方案?谢谢
stack
是基于 R 的。我注意到在rlang
中的stack
也给出了相同的结果。 - mt1022