在R语言中能否用purrr系列函数处理数据框自有元素?
在R语言中用purrr::map系列函数操作数据框自有元素的方法
当然可以用map系列函数基于同一数据框内的元素执行计算,你的代码返回空列表是因为参数传递错误:
你定义的x是包含3个数据框的列表,x$period这种写法是错误的——列表本身没有period这个元素,只有每个子数据框才有,所以x$period会返回NULL,map2接收的第二个参数为空,自然输出空列表。
正确写法(推荐用map)
只需要用map遍历列表中的每个数据框,直接调用数据框自身的列进行计算即可:
library(purrr) x = list( data.frame(age = c(1:4),period = c(2000:2003)), data.frame(age = c(5:8),period = c(1998:2001)), data.frame(age = c(11:19),period = c(1990:1998)) ) # 遍历每个数据框,添加difference列 map(x, ~ cbind(.x, difference = .x$period - .x$age))
这里的~定义了匿名函数,.x代表列表中的每个数据框元素,直接用.x$period和.x$age做运算,完全基于数据框自身的元素完成计算。
用map2的替代写法
如果一定要用map2,需要先把每个数据框的period提取成单独的列表,再和原列表配对:
period_list = map(x, ~ .x$period) map2(x, period_list, ~ cbind(.x, difference = .y - .x$age))
不过这种写法多了一步提取操作,不如直接用map简洁。
运行正确代码后,会得到包含3个数据框的列表,每个数据框都新增了difference列,计算结果符合预期。
内容的提问来源于stack exchange,提问作者doraemon
相关产品推荐
相关产品推荐

