gpt4 book ai didi

r - 两列之间的数据框操作并将结果添加为第三列

转载 作者:行者123 更新时间:2023-12-04 11:18:44 24 4
gpt4 key购买 nike

给定一个包含列的数据框:

  • “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)
}

)
}
)

Error in lapply(lapply(x$length2, strsplit, split = ","), as.numeric) : (list) object cannot be coerced to type 'double'

我在这里放弃了,感觉我所做的事情太复杂了。

最佳答案

另一个想法:

library(dplyr)
library(tidyr)

df %>%
separate_rows(length2) %>%
mutate_all(funs(as.numeric(as.character(.)))) %>%
group_by(length1) %>%
summarise(l2 = list(length2),
l3 = list(round(100 * length2 / length1)))

给出:

## A tibble: 3 x 3
# length1 l2 l3
# <dbl> <list> <list>
#1 10 <dbl [3]> <dbl [3]>
#2 12 <dbl [3]> <dbl [3]>
#3 14 <dbl [3]> <dbl [3]>

这会将结果存储在 list 中,以便于进一步操作:

#Observations: 3
#Variables: 3
#$ length1 <dbl> 10, 12, 14
#$ l2 <list> [<2, 3, 4>, <4, 5, 3>, <3, 2, 6>]
#$ l3 <list> [<20, 30, 40>, <33, 42, 25>, <21, 14, 43>]

关于r - 两列之间的数据框操作并将结果添加为第三列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38657732/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com