R-如何将一个变量与另一个变量列表中包含的某些级别相加?

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列、其他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行和第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这样的实际列表还是一个字符变量?它是一个实际列表