我有一个数据框,其中一列包含一个列表。我想将列表转换为数字,然后将值求和成新列。每行都有一个带有矢量的列:
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))
答案 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)
答案 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]])))