gpt4 book ai didi

r - R中数据框中每行的唯一元素计数

转载 作者:行者123 更新时间:2023-12-04 22:42:13 25 4
gpt4 key购买 nike

我有一个如下所示的数据框:

Group1  Group2  Group3  Group4
A B A B
A C B A
B B B B
A C B D
A D C A

我想向数据框中添加一个新列,该列将包含每行中唯一元素的数量。期望的输出:
Group1  Group2  Group3  Group4  Count
A B A B 2
A C B A 3
B B B B 1
A C B D 4
A D C A 3

我可以使用以下方法为每一行找到这样的计数
length(unique(c(df[,c(1,2,3,4)][1,])))

我想对数据框中的所有行做同样的事情。我尝试了 var=1 的 apply() 但没有成功。此外,如果您可以为此提供更 优雅的解决方案 ,那就太好了。

最佳答案

我们可以使用 applyMARGIN =1 来遍历行

df1$Count <- apply(df1, 1, function(x) length(unique(x)))
df1$Count
#[1] 2 3 1 4 3

或者使用 tidyverse
library(dplyr)
df1 %>%
rowwise() %>%
do(data.frame(., Count = n_distinct(unlist(.))))
# A tibble: 5 × 5
# Group1 Group2 Group3 Group4 Count
#* <chr> <chr> <chr> <chr> <int>
#1 A B A B 2
#2 A C B A 3
#3 B B B B 1
#4 A C B D 4
#5 A D C A 3

我们还可以使用 regex 以更快的方式执行此操作。它基于每个单元格只有一个字符的假设
nchar(gsub("(.)(?=.*?\\1)", "", do.call(paste0, df1), perl = TRUE))
#[1] 2 3 1 4 3

here给出了更详细的解释

关于r - R中数据框中每行的唯一元素计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43580891/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com