如何在R中创建data.frame时直接基于已有列生成新列
R创建data.frame时直接引用刚定义列的实现方法
你遇到的报错原因是原生data.frame()函数的参数默认在调用者环境中统一求值,构造过程中临时生成的列v2还没有被写入当前环境,因此cumsum(v2)会找不到对象报错。你可以通过以下几种方案实现需求:
方案1:使用tibble(推荐,代码最简洁)
tidyverse生态的tibble是data.frame的改进实现,原生支持构造过程中引用前面已经定义的列:
# 若未安装先运行 install.packages("tibble") library(tibble) sample_df2 <- tibble( v2 = rnorm(10), cs = cumsum(v2) )
方案2:纯base R实现(无需加载第三方包)
可以用transform()或者within()函数在data.frame构造的上下文内完成新列生成:
- 用
transform()的写法:
sample_df2 <- transform( data.frame(v2 = rnorm(10)), cs = cumsum(v2) )
- 用
within()的写法:
sample_df2 <- within(data.frame(v2 = rnorm(10)), { cs <- cumsum(v2) })
内容的提问来源于stack exchange,提问作者mmw
相关产品推荐
相关产品推荐

