使用lapply在旧列的基础上创建新列 [英] Using lapply to create new columns based on old columns

查看:51
本文介绍了使用lapply在旧列的基础上创建新列的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的数据如下:

DF <- structure(list(No_Adjusted_Gross_Income = c(183454, 241199, 249506
), NoR_from_1_to_5000 = c(1035373, 4272260, 1124098), NoR_from_5000_to_10000 = c(319540, 
4826042, 1959866)), row.names = c(NA, -3L), class = c("data.table", 
"data.frame"))
val <- c(2500.5, 7500)
vn <- c("AGI_from_1_to_5000", "AGI_from_5000_to_10000")

   No_Adjusted_Gross_Income NoR_from_1_to_5000 NoR_from_5000_to_10000
1:                   183454            1035373                 319540
2:                   241199            4272260                4826042
3:                   249506            1124098                1959866

我想基于列2和3创建新列,并使用 vn 中的名称乘以 val 中的值.我尝试这样做,如下所示:

I would like to create new columns, based on column 2 and 3, multiplied with the values from val, using the names from vn. I tried to do it as follows:

DF[,2:3] <- lapply(DF[,2:3], vn := val*DF[,2:3])

但这不起作用.

所需的输出:

DF <- setDT(DF)[, vn[1]:=val[1]*DF[,2]]
DF <- setDT(DF)[, vn[2]:=val[2]*DF[,3]]

DFout <- structure(list(No_Adjusted_Gross_Income = c(183454, 241199, 249506
), NoR_from_1_to_5000 = c(1035373, 4272260, 1124098), NoR_from_5000_to_10000 = c(319540, 
4826042, 1959866), AGI_from_1_to_5000 = c(2588950186.5, 10682786130, 
2810807049), AGI_from_5000_to_10000 = c(2396550000, 36195315000, 
14698995000)), row.names = c(NA, -3L), class = c("data.table", 
"data.frame"))

   No_Adjusted_Gross_Income NoR_from_1_to_5000 NoR_from_5000_to_10000 AGI_from_1_to_5000 AGI_from_5000_to_10000
1:                   183454            1035373                 319540         2588950187             2396550000
2:                   241199            4272260                4826042        10682786130            36195315000
3:                   249506            1124098                1959866         2810807049            14698995000

推荐答案

这应该有效.. lapply()不需要

library( data.table )
setDT( DF )
DF[, (var) := as.data.table ( t( t( DF[, 2:3] ) * val ) ) ][]


#    No_Adjusted_Gross_Income NoR_from_1_to_5000 NoR_from_5000_to_10000 AGI_from_1_to_5000 AGI_from_5000_to_10000
# 1:                   183454            1035373                 319540         2588950187             2396550000
# 2:                   241199            4272260                4826042        10682786130            36195315000
# 3:                   249506            1124098                1959866         2810807049            14698995000

这篇关于使用lapply在旧列的基础上创建新列的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆