R-如何将一个变量与另一个变量列表中包含的某些级别相加?
我有一个包含ID列、其他ID列表和一个值的数据框。我希望用列表列中ID值的总和创建一个新列 例如:R-如何将一个变量与另一个变量列表中包含的某些级别相加?,r,R,我有一个包含ID列、其他ID列表和一个值的数据框。我希望用列表列中ID值的总和创建一个新列 例如: ID x Value New Column 1 c(2,3,4) 6 17 2 c(1,3,4,7,8,9) 8 3 c(1,2) 4 14 4 c(1,3,5) 5 在这里,我们不知道第二行和第四行中新列的值,因为我们没有第5行、第7行、第8
ID x Value New Column
1 c(2,3,4) 6 17
2 c(1,3,4,7,8,9) 8
3 c(1,2) 4 14
4 c(1,3,5) 5
在这里,我们不知道第二行和第四行中新列的值,因为我们没有第5行、第7行、第8行和第9行的数据。第一行的新列是8+4+5或17。实际数据帧中没有丢失的数据
如何对数据框中的所有行执行此操作
谢谢 我认为,试图维持这种结构将产生巨大的开销。我可以建议一种不同的组织方式吗 一个values data.frame,仅包含每个id及其拥有的值:
values <- data.frame(id = 1:4, value = c(6,8,4,5))
从这里开始,我们只需要做一些连接就可以得到我们需要的。它很方便,因为您不必尝试解析子数据、帧列表等
library(dplyr)
full_join(inclusions, values, by = c("useid" = "id")) %>%
select(-useid) %>%
group_by(id) %>%
summarize(newvalue = sum(value))
# # A tibble: 4 × 2
# id newvalue
# <dbl> <dbl>
# 1 1 17
# 2 2 NA
# 3 3 14
# 4 4 NA
因为在第一次连接中缺少一些值,所以NAs也会导致后续的总和为NA。方便。我认为尝试维护这种结构会带来很大的开销。我可以建议一种不同的组织方式吗 一个values data.frame,仅包含每个id及其拥有的值:
values <- data.frame(id = 1:4, value = c(6,8,4,5))
从这里开始,我们只需要做一些连接就可以得到我们需要的。它很方便,因为您不必尝试解析子数据、帧列表等
library(dplyr)
full_join(inclusions, values, by = c("useid" = "id")) %>%
select(-useid) %>%
group_by(id) %>%
summarize(newvalue = sum(value))
# # A tibble: 4 × 2
# id newvalue
# <dbl> <dbl>
# 1 1 17
# 2 2 NA
# 3 3 14
# 4 4 NA
因为在第一次连接中缺少一些值,所以NAs也会导致后续的总和为NA。方便。查找一下:
sapply(df$x, function(x) sum(df$Value[match(x, df$ID)]) )
#[1] 17 NA 14 NA
其中df是:
进行一点查找:
sapply(df$x, function(x) sum(df$Value[match(x, df$ID)]) )
#[1] 17 NA 14 NA
其中df是:
df$x是一个像listc2,3,4,c1,3,4,7,8,9这样的实际列表还是一个字符变量?它是一个实际列表df$x是一个像listc2,3,4,3,4,7,8,9这样的实际列表还是一个字符变量?它是一个实际列表