如何在函数中引用列名,处理data.frame含'info'的单元格格式
解决方法:正确引用列名来替换'info'单元格
你遇到的问题核心是在sapply里无法正确获取当前处理列的列名——原来的代码里colnames(df)[x]是用单元格的值(比如'info')去索引列名,这显然不对,因为索引需要是位置数字或者列名字符串,而不是单元格内容。
下面给你两种可行的解决办法:
方法一:基础R实现(sapply遍历列名)
直接遍历数据框的列名,这样在处理每一列时就能明确知道当前列的名称,然后拼接成你想要的格式:
# 你的原始数据框 df <- data.frame('criteria1' = c('info','1', 'info', '', 'info'), "criteria2" = c('y','3', '', 'info', ''), "criteria3" = c('y','7', '', 'info', 'info')) # 遍历列名处理每一列 df[] <- sapply(names(df), function(col_name) { # 对当前列,把'info'替换成"列名=info",其他置空 ifelse(df[[col_name]] == 'info', paste0(col_name, ' = ', df[[col_name]]), '') }) # 查看处理后的结果 print(df)
运行后就能得到你期望的输出:
criteria1 criteria2 criteria3 1 criteria1 = info 2 3 criteria1 = info 4 5 criteria1 = info criteria2 = info criteria3 = info
方法二:dplyr包实现(更简洁)
如果你习惯用tidyverse风格的代码,可以用dplyr的across和cur_column()函数,它能直接获取当前处理列的名称:
library(dplyr) df <- df %>% mutate(across(everything(), ~ifelse(.x == 'info', paste0(cur_column(), ' = ', .x), '')))
这个方法代码更简洁,可读性也更强,适合经常用tidyverse的场景。
内容的提问来源于stack exchange,提问作者Mette
相关产品推荐
相关产品推荐

