如何解决您可以将变量设置为列名吗?
如果我有一个如下的数据框,带有文本值和 NA 单元格的组合:
id | Col1 | Col2 | Col3 | Col4 | Col5 | 列... |
---|---|---|---|---|---|---|
id1 | 不适用 | 不适用 | 样品 | 不适用 | 重量 | 等 |
id2 | 不适用 | 尺寸 | 不适用 | 不适用 | 不适用 | 等 |
id3 | 音量 | 尺寸 | 样品 | 不适用 | 不适用 | 等 |
id4 | 不适用 | 不适用 | 不适用 | 数量 | 不适用 | 等 |
id5 | 不适用 | 不适用 | 样品 | 数量 | 重量 | 等 |
id | 音量 | 尺寸 | 样本 | 数量 | 重量 |
---|---|---|---|---|---|
id1 | 不适用 | 不适用 | 样品 | 不适用 | 重量 |
id2 | 不适用 | 尺寸 | 不适用 | 不适用 | 不适用 |
id3 | 音量 | 尺寸 | 样品 | 不适用 | 不适用 |
id4 | 不适用 | 不适用 | 不适用 | 数量 | 不适用 |
id5 | 不适用 | 不适用 | 样品 | 数量 | 重量 |
解决方法
试试下面的代码
> cbind(df[1],setNames(df[-1],sapply(df[-1],function(x) unique(na.omit(x)))))
id volume size sample qty weight
1 id1 <NA> <NA> sample <NA> weight
2 id2 <NA> size <NA> <NA> <NA>
3 id3 volume size sample <NA> <NA>
4 id4 <NA> <NA> <NA> qty <NA>
5 id5 <NA> <NA> sample qty weight
数据
> dput(df)
structure(list(id = c("id1","id2","id3","id4","id5"),Col1 = c(NA,NA,"volume",NA),Col2 = c(NA,"size",Col3 = c("sample","sample","sample"),Col4 = c(NA,"qty","qty"),Col5 = c("weight","weight"
)),class = "data.frame",row.names = c(NA,-5L))
,
您可以使用 here 中的 Mode
函数获取每列中出现频率最高的值。
Mode <- function(x) {
ux <- unique(na.omit(x))
ux[which.max(tabulate(match(x,ux)))]
}
将其应用于每一列并更改列名称。
names(df)[-1] <- sapply(df[-1],Mode)
df
# id volume size sample qty weight
#1 id1 <NA> <NA> sample <NA> weight
#2 id2 <NA> size <NA> <NA> <NA>
#3 id3 volume size sample <NA> <NA>
#4 id4 <NA> <NA> <NA> qty <NA>
#5 id5 <NA> <NA> sample qty weight
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。