首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >向paste0中的数据框添加新列

向paste0中的数据框添加新列
EN

Stack Overflow用户
提问于 2018-07-26 00:56:46
回答 1查看 889关注 0票数 0

Rfor循环中,我创建了不同的数据帧并对它们执行了一些操作。我需要的最后一个操作是用前三列的平均值将额外的一列附加到数据帧中。

我的(示例)代码是:

代码语言:javascript
代码运行次数:0
运行
复制
for(comparison in c("A_N_vs_T", "A_N_vs_B", "A_N_vs_BT", "A_N_vs_Nprobes",
                    "B_N_vs_T","B_N_vs_B","B_N_vs_BT","B_N_vs_Nprobes")){
 DO SOME OPERATIONS
 assign(paste0("Norm_counts_",comparison,"$N_mean"), rowMeans(eval(parse(text=paste0("Norm_counts_",comparison)))[,c(1,2,3)],na.rm = T))
} 

但是,它不会创建新的列N_mean,而是创建一个新变量,例如名为Norm_counts_A_N_vs_T$N_mean的变量,它在其中存储平均值。

是否可以更改paste0的此行为

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-26 01:17:23

首先,获取要对其进行操作的data.frames的字符向量:

代码语言:javascript
代码运行次数:0
运行
复制
# either specify it yourself
df_names <- c("df_one", "df_two")

# or get all data.frames in the global environment
temp <- x=sapply(ls(), function(x) is.data.frame(get(x)))
df_names <- names(temp)[temp==TRUE]

其次,编写一个函数来执行您想要的操作。

这个特定的函数以字符串形式接受data.frame的名称,并返回data.frame (作为对象)和名为" rowmeans“的新列,该列包含前3列的行均值。

代码语言:javascript
代码运行次数:0
运行
复制
add_rowmeans <- function(df_as_str) {
    # get the obj the str refers to
    df <- eval(as.name(df_as_str))
    # add a column with rowmeans of cols 1-3
    df$rowmeans <- rowMeans(df[,1:3])
    # return df with new column as output
    return(df)
}

最后,循环遍历您的data.frame名称,对每个名称应用该函数,并使用assign保存结果

代码语言:javascript
代码运行次数:0
运行
复制
for(i in seq_along(df_names)) {
    this_df_name <- df_names[i]
    assign(this_df_name, add_rowmeans(this_df_name))
}

我在这两个data.frames上进行了测试:

代码语言:javascript
代码运行次数:0
运行
复制
set.seed(1234)
df1 <- as.data.frame(matrix(sample(1:9, 30, T), nrow=10))
df2 <- as.data.frame(matrix(sample(1:9, 30, T), nrow=10))
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51524152

复制
相关文章

相似问题

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