【发布时间】:2017-09-21 20:46:04
【问题描述】:
我在数据框中有很多列 (120)。 我想在这个数据框中创建一个新列,每一行都包含来自 120 列中每一行的值的唯一值(忽略 NA)。例如:
V1 V2 V3 V4 V5
a a NA c d
c d e f e
x x x NA NA
应添加 V6 列
V6
a c d
c d e f
x
欢迎提出任何建议!
瓦内斯
【问题讨论】:
我在数据框中有很多列 (120)。 我想在这个数据框中创建一个新列,每一行都包含来自 120 列中每一行的值的唯一值(忽略 NA)。例如:
V1 V2 V3 V4 V5
a a NA c d
c d e f e
x x x NA NA
应添加 V6 列
V6
a c d
c d e f
x
欢迎提出任何建议!
瓦内斯
【问题讨论】:
通过使用apply 和toString
db$New=apply(db,1,function(x) toString(sort(unique(x[!is.na(x)]))))
db
V1 V2 V3 V4 V5 New
1 a a <NA> c d a, c, d
2 c d e f e c, d, e, f
3 x x x <NA> <NA> x
或使用paste
db$New=apply(db,1,function(x) paste(sort(unique(x[!is.na(x)]),collapse = ' ')))
db
V1 V2 V3 V4 V5 New
1 a a <NA> c d a c d
2 c d e f e c d e f
3 x x x <NA> <NA> x
添加的sort 确保同一组唯一值始终以相同的顺序出现。
【讨论】:
unique() 包裹在sort() 中也是值得的,这样相同的唯一集合总是以相同的顺序出现。