r - 如何在函数中引用列名

标签 r dataframe paste sapply

我有一个 df.如果“info”出现在一行中,我想要一个函数来获取列名称并将其与单元格中的信息粘贴在一起,并在它们之间使用“=”。我已经尝试过下面的函数,该函数有效,只是它不引用右列中的列名

df <- data.frame('criteria1' = c('info','1', 'info', '', 'info'), "criteria2" = c('y','3', '', 'info', ''), "criteria3" = c('y','7', '', 'info', 'info'))

df[] <- sapply(df, function(x) ifelse(x == 'info', paste(colnames(df)[x], ' = ', x),''))

我的预期输出是这样的(列名是否被删除并不重要,重要的是单元格中的信息)

df_exp <- data.frame('criteria1' = c('criteria1= info','', 'criteria1=info', '', 'criteria1 =info'), "criteria2" = c('','', '', 'criteria2 = info', ''), "criteria3" = c('','', '', 'criteria3 = info', 'criteria3 = info'))

最佳答案

我会选择列号,1:ncol(df)(更快)或seq(df)。我用的是前者。

df <- sapply(1:ncol(df), function(x) 
  ifelse(df[[x]] == 'info', paste(colnames(df)[x], ' = ', df[[x]]),''))
df
#                      [,1]                 [,2]                 [,3]                
# [1,] "criteria1  =  info" ""                   ""                  
# [2,] ""                   ""                   ""                  
# [3,] "criteria1  =  info" ""                   ""                  
# [4,] ""                   "criteria2  =  info" "criteria3  =  info"
# [5,] "criteria1  =  info" ""                   "criteria3  =  info"

使用stack/unstack的另一种好方法:

r <- grep("info", tmp$values)
tmp <- stack(df)
tmp[r, 1] <- apply(tmp[r, 2:1], 1, paste, collapse="=")
tmp[-r, 1] <- ""  ## in case you want non-"info" cells cleared
df <- unstack(tmp)
df
#        criteria1      criteria2      criteria3
# 1 criteria1=info                              
# 2                                             
# 3 criteria1=info                              
# 4                criteria2=info criteria3=info
# 5 criteria1=info                criteria3=info

关于r - 如何在函数中引用列名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62638554/

相关文章:

python - 如何仅替换数据框中前面带有数字的某个单词?

excel - 如果列中的单元格有数据,则复制并粘贴到同一行中的不同单元格

r - 配对 data.table 中的行

r - 一步实例化单元格中包含列表的 data.frame

r - 从 2 个向量中找到最佳匹配的成对点

r - 将主要组件作为变量添加到数据框

python - pandas wide_to_long,id变量需要唯一标识每一行

r - 在 R 中粘贴字符串最有效的方法是什么?

swift - 检测 Swift 中 NSTextField 的粘贴操作

r - 从列名称作为变量的数据框列中修剪前导/尾随空格