Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R-对列执行操作,并将结果放在不同的列中,操作由输出列指定';姓名_R - Fatal编程技术网

R-对列执行操作,并将结果放在不同的列中,操作由输出列指定';姓名

R-对列执行操作,并将结果放在不同的列中,操作由输出列指定';姓名,r,R,我有一个数据框,它有3列数据——L1、L2、L3,以及标记为L1+L2、L2+L3、L3+L1、L1-L2等的空列。这些是列操作的组合。是否有方法检查列名并执行必要的操作以用数据填充新列 我在想: -使用match查找适当的原始列,并使用for循环迭代此搜索中的所有列? 因此,如果我试图填充的列是L1+L2,我会有如下内容: apply(dataframe[,c(i,j),1,sum)将操作存储在列名中似乎很奇怪,但我认为可以实现: 和往常一样,示例数据很有帮助 ## Creating some

我有一个数据框,它有3列数据——L1、L2、L3,以及标记为L1+L2、L2+L3、L3+L1、L1-L2等的空列。这些是列操作的组合。是否有方法检查列名并执行必要的操作以用数据填充新列

我在想: -使用match查找适当的原始列,并使用for循环迭代此搜索中的所有列? 因此,如果我试图填充的列是L1+L2,我会有如下内容:
apply(dataframe[,c(i,j),1,sum)

将操作存储在列名中似乎很奇怪,但我认为可以实现:

和往常一样,示例数据很有帮助

## Creating some sample data
mydf <- setNames(data.frame(matrix(1:9, ncol = 3)), 
                 c("L1", "L2", "L3"))

## The operation you want to do...
morecols <- c(
  combn(names(mydf), 2, FUN=function(x) paste(x, collapse = "+")),
  combn(names(mydf), 2, FUN=function(x) paste(x, collapse = "-"))
)

## THE FINAL SAMPLE DATA
mydf[, morecols] <- NA
mydf
#   L1 L2 L3 L1+L2 L1+L3 L2+L3 L1-L2 L1-L3 L2-L3
# 1  1  4  7    NA    NA    NA    NA    NA    NA
# 2  2  5  8    NA    NA    NA    NA    NA    NA
# 3  3  6  9    NA    NA    NA    NA    NA    NA

将操作存储在列名中似乎很奇怪,但我认为可以实现:

和往常一样,示例数据很有帮助

## Creating some sample data
mydf <- setNames(data.frame(matrix(1:9, ncol = 3)), 
                 c("L1", "L2", "L3"))

## The operation you want to do...
morecols <- c(
  combn(names(mydf), 2, FUN=function(x) paste(x, collapse = "+")),
  combn(names(mydf), 2, FUN=function(x) paste(x, collapse = "-"))
)

## THE FINAL SAMPLE DATA
mydf[, morecols] <- NA
mydf
#   L1 L2 L3 L1+L2 L1+L3 L2+L3 L1-L2 L1-L3 L2-L3
# 1  1  4  7    NA    NA    NA    NA    NA    NA
# 2  2  5  8    NA    NA    NA    NA    NA    NA
# 3  3  6  9    NA    NA    NA    NA    NA    NA

dfrm
dfrm您可以使用
strsplit
您可以使用
strsplit
哇,谢谢!关于语法的快速问题-因此eval只计算表达式,所以您使用parse从字符串创建表达式?@user1292636,非常好。
parse
的输出是一个
表达式,但它没有计算,嗯需要
eval
。哇,谢谢!关于语法的快速问题-因此eval只计算表达式,所以您使用parse从字符串创建表达式?@user2631296,非常好。
parse
的输出是一个
表达式
,但它没有计算,因此需要
eval
dfrm <- data.frame( L1=1:3, L2=1:3, L3=3+1,  `L1+L2`=NA, 
                   `L2+L3`=NA, `L3+L1`=NA, `L1-L2`=NA, 
                    check.names=FALSE)
dfrm
#------------
  L1 L2 L3 L1+L2 L2+L3 L3+L1 L1-L2
1  1  1  4    NA    NA    NA    NA
2  2  2  4    NA    NA    NA    NA
3  3  3  4    NA    NA    NA    NA
#-------------
 dfrm[, 4:7] <- lapply(names(dfrm[, 4:7]), 
                       function(nam) eval(parse(text=nam), envir=dfrm) )
 dfrm
#-----------
  L1 L2 L3 L1+L2 L2+L3 L3+L1 L1-L2
1  1  1  4     2     5     5     0
2  2  2  4     4     6     6     0
3  3  3  4     6     7     7     0