首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >根据数据帧R中的另一列从另一列提取列的值

根据数据帧R中的另一列从另一列提取列的值
EN

Stack Overflow用户
提问于 2017-06-21 16:59:33
回答 1查看 399关注 0票数 0

我正在处理数据框架,我需要提取以下数据:

我有以下数据框架。

代码语言:javascript
运行
复制
a = c(1:40)
b = c(41:80)
c = c(81:120)
d = c('a','b','c','d','e')
e = NA
f = NA
g = NA
df = cbind.data.frame(a,b,c,d,e,f,g)
names(df) = c('1m','2m','3m','reg','1m_comp','2m_comp','3m_comp')


1m 2m 3m reg  1m_comp 2 m_comp  3m_comp
 1 41 81   a      NA      NA      NA
 2 42 82   b      NA      NA      NA
 3 43 83   c      NA      NA      NA
 4 44 84   d      NA      NA      NA
 5 45 85   e      NA      NA      NA
 6 46 86   a      NA      NA      NA

如果'reg‘列具有一定的值,则使用if函数填充“comp”列中来自“1M”、“2m”列的值。

我这样做:

代码语言:javascript
运行
复制
df = within(df, {
1m[reg=='a'] <- 1m_comp[reg=='a']
2m[reg=='a'] <- 2m_comp[reg=='a']
3m[reg=='a'] <- 3m_comp[reg=='a']})

我正在处理的数据文件中有46+46这样的列(列和比较)。我没有编写46行代码,而是尝试了

代码语言:javascript
运行
复制
df = within(df, {
for (i in 1:46) {
str_c(i,'m_comp')[reg=='a'] = str_c(i,'m')[reg=='a']}})

然而,我认为我的数据框架没有变化。我也没看到任何错误。

编辑:现在就解决!谢谢d.b。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-21 17:31:37

如果你不想硬编码所有的列名,你可以使用这样的东西。

代码语言:javascript
运行
复制
comp.cols <- colnames(df)[grepl("_comp", colnames(df)) == TRUE]
non.comp.cols <- sub("_comp", "", comp.cols)

df[df[,"reg"] == "a", comp.cols] <- df[df[,"reg"] == "a", non.comp.cols]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44682109

复制
相关文章

相似问题

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