如何求和嵌套在数据帧列中的向量?

时间:2019-03-20 18:19:57

标签: r dataframe

我有一个数据框,其中一列包含一个列表。我想将列表转换为数字,然后将值求和成新列。每行都有一个带有矢量的列:

c("47", "39", "1")

新列将包含这些数字的总和,如下所示:

List                  SumList
c("47", "39", "1")     87
c("11", "11")          22
c("1", "2")             3

我尝试了几种不同的方法,但是似乎并没有产生我需要的结果。

示例数据框:

DF <- structure(list(list = structure(list(c("47", "39", "1"), c("11", 
"11"), c("1", "2")))), class = "data.frame", row.names = c(NA, -3L))

4 个答案:

答案 0 :(得分:4)

您可以使用dplyr函数逐行完成并进行更改。

示例:

string = "pGpEusuCSWEaPOJmamlFAnIBgAJGtcJaMPFTLfUfkQKXeymydQsdWCTyEFjFgbSmknAmKYFHopWceEyCSumTyAFwhrLqQXbWnXSn"

amazing_substring_start = ['a','e','i','o','u','A','E','I','O','U']

amazing_substrings = []

for i in range(len(string)):
    if string[i] in amazing_substring_start:
        for j in range(len(string[i:])+1):
            amazing_substring = string[i:i+j]
            if amazing_substring!='':
                amazing_substrings += [amazing_substring]

print amazing_substrings,len(amazing_substrings)%10003

答案 1 :(得分:3)

1)假定末尾的“注释”中的数据框,请尝试以下代码。不使用任何软件包。

transform(DF, sum = sapply(list, function(x) sum(as.numeric(x))))

给予:

       list sum
1 47, 39, 1  87
2    11, 11  22
3      1, 2   3

2)另一种方法是将DF转换为长格式,然后求和得出相同的结果。同样,不使用任何软件包。

long <- stack(setNames(DF$list, seq_along(DF$list)))
transform(DF, sum = rowsum(as.numeric(long$value), long$ind))

注意

可复制形式的输入:

DF <- structure(list(list = structure(list(c("47", "39", "1"), c("11", 
"11"), c("1", "2")))), class = "data.frame", row.names = c(NA, -3L))

答案 2 :(得分:2)

这是一个使用purrr的{​​{1}}解决方案。

map_dbl

reprex package(v0.2.1)于2019-03-20创建

答案 3 :(得分:0)

假设我们使用G. Grothendieck结构:

DF <- structure(list(list = structure(list(c("47", "39", "1"), c("11", 
                                                                 "11"), c("1", "2")))), class = "data.frame", row.names = c(NA, -3L))

DF$SumList <-lapply(1:nrow(DF), function(x) sum(as.double(unlist(DF$list[x]))))

在弗兰克(Frank)输入下:

DF$SumList <-lapply(1:nrow(DF), function(x) sum(as.double(DF$list[[x]])))