r - 有没有办法将多列中的值转为列名?

标签 r dataframe

我有一个数据框:

  df <- structure(list(ziekten = c(1, 2, 2, 2, 2, 2, 1, 2, 2, 2), voedselallergie = c("no", 
"no", "no", "no", "no", "no", "no", "no", "no", "no"), ziekaller2 = c("no", 
"no", "no", "no", "no", "no", "no", "no", "no", "no"), hooikoorts = c("yes", 
"no", "no", "no", "no", "no", "yes", "no", "no", "no"), ziekaller4 = c("no", 
"no", "no", "no", "no", "no", "no", "no", "no", "no"), ziekaller5 = c("no", 
"no", "no", "no", "no", "no", "no", "no", "no", "no"), anderallergie = c("no", 
"no", "no", "no", "no", "no", "no", "no", "no", "no"), astma = c("no", 
"no", "no", "no", "no", "no", "no", "no", "no", "no"), ziekdiabet1 = c("no", 
"no", "no", "no", "no", "no", "no", "no", "no", "no")), row.names = c(NA, 
-10L), class = c("tbl_df", "tbl", "data.frame"))

这只是实际数据框中的列总数的一小部分,但我想将列中的值更改为相应的列名称。我知道如何使用 ifelsecase_when 来完成此操作,但这效率不高。

第一列可以保持原样,因此从第二列开始,我想将值“yes”更改为列名称。结果如下:

df_new <-  structure(list(ziekten = c(1, 2, 2, 2, 2, 2, 1, 2, 2, 2), voedselallergie = c(NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA), ziekaller2 = c(NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA), hooikoorts = c("hooikoorts", NA, 
    NA, NA, NA, NA, "hooikoorts", NA, NA, NA), ziekaller4 = c(NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA), ziekaller5 = c(NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA), anderallergie = c(NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA), astma = c(NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA), ziekdiabet1 = c(NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA)), row.names = c(NA, -10L), class = c("tbl_df", "tbl", 
    "data.frame"))

希望能帮到你!

最佳答案

一个衬垫底座 R:

df[-1] <- Map(function(nm, x) ifelse(x == "yes", nm, nm[NA]),
              names(df)[-1], df[-1])
df
# # A tibble: 10 × 9
#    ziekten voedselallergie ziekaller2 hooikoorts ziekaller4 ziekaller5 anderallergie astma ziekdiabet1
#      <dbl> <chr>           <chr>      <chr>      <chr>      <chr>      <chr>         <chr> <chr>      
#  1       1 <NA>            <NA>       hooikoorts <NA>       <NA>       <NA>          <NA>  <NA>       
#  2       2 <NA>            <NA>       <NA>       <NA>       <NA>       <NA>          <NA>  <NA>       
#  3       2 <NA>            <NA>       <NA>       <NA>       <NA>       <NA>          <NA>  <NA>       
#  4       2 <NA>            <NA>       <NA>       <NA>       <NA>       <NA>          <NA>  <NA>       
#  5       2 <NA>            <NA>       <NA>       <NA>       <NA>       <NA>          <NA>  <NA>       
#  6       2 <NA>            <NA>       <NA>       <NA>       <NA>       <NA>          <NA>  <NA>       
#  7       1 <NA>            <NA>       hooikoorts <NA>       <NA>       <NA>          <NA>  <NA>       
#  8       2 <NA>            <NA>       <NA>       <NA>       <NA>       <NA>          <NA>  <NA>       
#  9       2 <NA>            <NA>       <NA>       <NA>       <NA>       <NA>          <NA>  <NA>       
# 10       2 <NA>            <NA>       <NA>       <NA>       <NA>       <NA>          <NA>  <NA>       

关于r - 有没有办法将多列中的值转为列名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75920891/

相关文章:

python - 在 Pandas 中添加两列时输出错误

r - 将 rgl 3D 场景保存到 u3d(用于 .pdf 集成)

python - += 更新 pandas datadame 中的行

r - data.table/data.frame rbind 无法正常工作

python - 从一大组 python 列表中,找到具有最多共同元素的 2 个列表 - Python/Pandas

dataframe - 如何根据行的字符串值高效地抓取数据

r - 如何简化R中的嵌套列表?

r - 从github存储库安装开发版本R包时如何指定lib目录

R: rm 和 remove 有什么区别?

r - 如何及时了解 R 包中的已知错误和错误修复?