首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在数据帧中按列名重命名观察?

如何在数据帧中按列名重命名观察?
EN

Stack Overflow用户
提问于 2020-10-24 15:22:06
回答 4查看 567关注 0票数 0

我有一个类似于以下内容的数据框架:

代码语言:javascript
复制
Name             L06          R12       L02
Joe Smith         1            0         0
Dave Thomas       0            1         1
Alex Smith        0            0         1
Eric Jones        1            0         0

我希望将值为1的观察重新命名为其列的名称。请注意,我将只重命名某些列(此处列2-4)。

代码语言:javascript
复制
Name             L06          R12       L02
Joe Smith         L06          0         0
Dave Thomas       0            R12       L02
Alex Smith        0            0         L02
Eric Jones        L06          0         0

这个是可能的吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2020-10-24 15:27:06

您可以尝试使用来自purrrpurrr

代码语言:javascript
复制
cols <- 2:4
df[cols] <- purrr::imap(df[cols], ~replace(.x, .x == 1, .y))
df

#        Name L06 R12 L02
#1   JoeSmith L06   0   0
#2 DaveThomas   0 R12 L02
#3  AlexSmith   0   0 L02
#4  EricJones L06   0   0

在基本R中,可以使用Map

代码语言:javascript
复制
df[cols] <- Map(function(x, y) replace(x, x == 1, y), df[cols], names(df[cols]))
票数 2
EN

Stack Overflow用户

发布于 2020-10-24 15:45:52

一种base R方法

代码语言:javascript
复制
df[df==1] <-t(replicate(nrow(df),colnames(df)))[df==1]

给予,

代码语言:javascript
复制
         Name L06 R12 L02
1   Joe Smith L06   0   0
2 Dave Thomas   0 R12 L02
3  Alex Smith   0   0 L02
4  Eric Jones L06   0   0
票数 1
EN

Stack Overflow用户

发布于 2020-10-24 15:41:41

这是否有效:

代码语言:javascript
复制
> library(dplyr)
> library(tidyr)
> df %>% pivot_longer(-Name, names_to = 'LR', values_to = 'Ones') %>% 
+   mutate(val = case_when(Ones == 1 ~ LR, TRUE ~ NA_character_)) %>% 
    pivot_wider(id_cols = Name, names_from = LR, values_from = val) %>% 
    +   mutate(across(2:4, ~replace_na(., '0')))
    # A tibble: 4 x 4
      Name        L06   R12   L02  
      <chr>       <chr> <chr> <chr>
    1 Joe Smith   L06   0     0    
    2 Dave Thomas 0     R12   L02  
    3 Alex Smith  0     0     L02  
    4 Eric Jones  L06   0     0    
    > 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64514968

复制
相关文章

相似问题

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