【发布时间】:2020-11-24 13:59:37
【问题描述】:
我有一个包含 4 列的数据集,其中包含名称,其中名称的数量和名称的顺序在列之间有所不同。某些列还可以包含两次或更多次相同的名称。如下所示:
df<- data.frame(x1=c("Ben","Alex","Tim", "Lisa", "MJ","NA", "NA","NA","NA"),
x2=c("Ben","Paul","Tim", "Linda", "Alex", "MJ", "Lisa", "Ken","NA"),
x3=c("Tomas","Alex","Ben", "Paul", "MJ", "Tim", "Ben", "Alex", "Linda"),
x4=c("Ben","Alex","Tim", "Lisa", "MJ", "Ben", "Barbara","NA", "NA"))
现在我必须先提取数据集中的唯一名称。我使用以下代码做到了这一点:
u<- as.vector(unique(unlist(df)))
其次,我需要找到可以在所有 4 列(A 类名称)、4 列中的 3 列(B 类名称)和 4 列中的 2 列(C 类名称)中找到的名称。
这就是我卡住的地方。我只能使用以下方法提取所有 4 列中包含的名称:
n<- ifelse(u%in%df$x1 & u%in%df$x2 & u%in%df$x3 &
u%in%df$x4", A, B)
因此,例如,Ben 将是 A 类名称,因为它可以在所有 4 列中找到,而 Lisa 将是 B 类名称,因为它只能在 4 列中的 3 列中找到。
Name Class
Ben A
Lisa B
有没有更好的方法来根据可以找到的列数对唯一名称进行分类,以及如何对 B 和 C 类名称进行分类?
提前致谢!
【问题讨论】:
-
对不起!我为较短的列添加了一些“NA”行。所以它现在更像原始数据。
-
stackoverflow.com/questions/63235393/… 您创建了一个带有类似问题的主题。看答案。合适吗?
-
table(unlist(lapply(df, levels)))(如果这些是因素)或table(unlist(lapply(df, unique)))(如果这些是字符)是另一种选择
标签: r if-statement character categorization