给定一个带有列的数据框:
“ length1”整数作为字符
“ length2”的每个元素都是一串数字
我想获得length2列相对于length1列的百分比。因此,例如df $ length2 / df $ lenght1 * 100。
请参阅以下最小示例:
> df=data.frame(length1=c("10","12","14"))
> df$length2=list("2,3,4","4,5,3","3,2,6")
> df
length1 length2
1 10 2,3,4
2 12 4,5,3
3 14 3,2,6
> dfresult=df
> dfresult$resultInPercent=list("20,30,40","33,41,25","21,14,42")
> dfresult
length1 length2 resultInPercent
1 10 2,3,4 20,30,40
2 12 4,5,3 33,41,25
3 14 3,2,6 21,14,42
我无法使其正常工作,我的方法是:
dfresult=apply(df, 1, function(x)
{
lapply(lapply(lapply(x$length2,strsplit,split=","),as.numeric),function(y)
{
round(as.numeric(y)/as.numeric(x$length1)*100)
}
)
}
)
lapply(lapply(x $ length2,strsplit,split =“,”),as.numeric中的错误
:(列表)对象不能被强制键入'double'
我放弃了这里,感觉到我要做的就是变得复杂。
最佳答案
由于列是factor
类,因此我们在使用定界符character
转换为,
类后将'length2'拆分,将list
中的元素转换为numeric
,使用mapply
划分list
与相应的vector
元素为'length1',round
输出并转换为单个字符串(toString
是paste(., collapse=", ")
的包装器)
mapply(function(x,y) toString(round(x/y)),
lapply(strsplit(as.character(df$length2), ","), as.numeric),
as.numeric(as.character(df$length1))/100)
#[1] "20, 30, 40" "33, 42, 25" "21, 14, 43"