Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/72.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 for循环以将多个变量粘贴在一起_R - Fatal编程技术网

加速R for循环以将多个变量粘贴在一起

加速R for循环以将多个变量粘贴在一起,r,R,我是新来的,但需要一些帮助。我有一个数据帧列表,对于列表中的每个元素(即data.frame),我想快速地将数据集中的一列粘贴到同一数据集中的多个其他列,仅以句点(“.”)分隔 因此,如果我在数据帧列表中有一组数据: list1[[1]] A B C 2 1 5 4 2 2 然后我想要以下结果: list1[[1]] A B C 2.5 1.5 5 4.2 2.2 2 其中C分别粘贴到A和B。然后,我希望对列表中的每个数据帧执行此操作 我尝试了以下方法

我是新来的,但需要一些帮助。我有一个数据帧列表,对于列表中的每个元素(即data.frame),我想快速地将数据集中的一列粘贴到同一数据集中的多个其他列,仅以句点(“.”)分隔

因此,如果我在数据帧列表中有一组数据:

list1[[1]]

A  B  C
2  1  5
4  2  2
然后我想要以下结果:

list1[[1]]

 A    B   C
2.5  1.5  5
4.2  2.2  2  
其中C分别粘贴到A和B。然后,我希望对列表中的每个数据帧执行此操作

我尝试了以下方法:

pasteX<-function(df) {for (i in 1:dim(df)[2]-1) {
df[,i]<-as.numeric(sprintf("%s.%s", df[,i], df$C))
}
return(df)}
list2<-lapply(list1, pasteX)

pasteX我们可以使用
Map

list1[[1]][-3] <- Map(function(x, y) as.numeric(sprintf('%s.%s', x, y)), 
                     list1[[1]][-3], list1[[1]][3])

或者使用
tidyverse

library(tidyverse)
map(list1, ~ .x %>%
               mutate_at(1:2, funs(as.numeric(sprintf('%s.%s', ., C)))))
或使用
数据。表格

library(data.table)
lapply(list1,  function(x) setDT(x)[, (1:2) := 
     lapply(.SD, function(x) as.numeric(sprintf('%s.%s', x, C))) ,
             .SDcols = 1:2][])

假设所有的值都是小于10的整数

lapply(list1, function(x){
    x[,-3] <- x[,-3] + x[,3]/10
    x})
lappy(列表1,函数(x){
x[,-3]试试这个:

df <- data.frame(a = c(1,2,3), b = c(3,2,1), c = c(2,1,1))


pastex <- function(x){
 m<-  sapply(df[,1:2], function(x) as.numeric(paste(x, df$c, sep = '.')))
 m <- as.data.frame(m)
 m <- cbind(m, df["c"])
 return(m)
}

mylist <- list(df1 = df, df2 = df)

lapply(mylist, pastex)

df欢迎。理想情况下,以一种更易于阅读的方式提供您的数据:啊,感谢您分享……从现在起,我将更加关注如何展示我的数据和问题!谢谢,@akrun!这很有用,我现在将试着实现它,看看它给我带来了多大的提升。@zeekster26没问题。如果您正在检查基准测试,我会还更新了data.table方法。请检查alsoSweet!非常感谢…我尝试了data.table方法,但操作有点错误。地图解决方案是迄今为止最快的!
df <- data.frame(a = c(1,2,3), b = c(3,2,1), c = c(2,1,1))


pastex <- function(x){
 m<-  sapply(df[,1:2], function(x) as.numeric(paste(x, df$c, sep = '.')))
 m <- as.data.frame(m)
 m <- cbind(m, df["c"])
 return(m)
}

mylist <- list(df1 = df, df2 = df)

lapply(mylist, pastex)