首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >加速R for循环以将多个变量粘贴到一起

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

Stack Overflow用户
提问于 2018-07-13 04:03:34
回答 2查看 205关注 0票数 3

我是新来的,但需要一些帮助。我有一个数据框列表,对于列表中的每个元素(即data.frame),我希望将数据集中的一列快速粘贴到同一数据集中的多个其他列中,只用句点(".")分隔。

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

代码语言:javascript
复制
list1[[1]]

A  B  C
2  1  5
4  2  2

然后,我希望得到以下结果:

代码语言:javascript
复制
list1[[1]]

 A    B   C
2.5  1.5  5
4.2  2.2  2  

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

我尝试过以下几种方法:

代码语言:javascript
复制
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)

但是对于更大的矩阵和列表,这种方法非常慢。有什么建议可以让这段代码更快吗?谢谢!

EN

回答 2

Stack Overflow用户

发布于 2018-07-13 04:27:56

假设一切都是小于10的整数

代码语言:javascript
复制
lapply(list1, function(x){
    x[,-3] <- x[,-3] + x[,3]/10
    x})
票数 4
EN

Stack Overflow用户

发布于 2018-07-13 04:30:39

试试这个:

代码语言:javascript
复制
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)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51313602

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档