R 按列和行组计算唯一值
我有一个例子:df.Journal.ConferencesR 按列和行组计算唯一值,r,R,我有一个例子:df.Journal.Conferences venue author0 author1 author2 ... author19 A John Mary B Peter Jacob Isabella C Lia B Jacob Lara John C Mary B Isabella 我想知道每个地点有多少独特的作者 结果: A 2 B 5 C 2 编辑: 这是我的数据链接:。因为你的数据很难复制,我生
venue author0 author1 author2 ... author19
A John Mary
B Peter Jacob Isabella
C Lia
B Jacob Lara John
C Mary
B Isabella
我想知道每个地点有多少独特的作者
结果:
A 2
B 5
C 2
编辑:
这是我的数据链接:。因为你的数据很难复制,我生成了一个类似的数据集, 这应该是一个词
set.seed(1984)
df <- data.frame(id = sample(1:5,10, replace= T),
v1 = sample(letters[1:5],10,replace= T),
v2 = sample(letters[1:5],10,replace= T),
v3 = sample(letters[1:5],10,replace= T),
v4 = sample(letters[1:5],10,replace= T),
stringsAsFactors = F)
z <- data.frame( id = unique(df$id), n = NA )
for (i in z$id) {
z$n[z$id == i] <- length(unique(unlist(df[df$id == i,-1])))
}
z
# id n
# 1 4 4
# 2 3 4
# 3 2 4
# 4 5 4
# 5 1 3
因为你的数据很难复制,我生成了一个类似的数据集, 这应该是一个词
set.seed(1984)
df <- data.frame(id = sample(1:5,10, replace= T),
v1 = sample(letters[1:5],10,replace= T),
v2 = sample(letters[1:5],10,replace= T),
v3 = sample(letters[1:5],10,replace= T),
v4 = sample(letters[1:5],10,replace= T),
stringsAsFactors = F)
z <- data.frame( id = unique(df$id), n = NA )
for (i in z$id) {
z$n[z$id == i] <- length(unique(unlist(df[df$id == i,-1])))
}
z
# id n
# 1 4 4
# 2 3 4
# 3 2 4
# 4 5 4
# 5 1 3
使用dplyr和tidyr,将数据从宽改为长,然后按计数分组
library(dplyr)
library(tidyr)
gather(df1, key = author, value = name, -venue) %>%
select(venue, name) %>%
group_by(venue) %>%
summarise(n = n_distinct(name, na.rm = TRUE))
# # A tibble: 3 × 2
# venue n
# <chr> <int>
# 1 A 2
# 2 B 5
# 3 C 2
数据
编辑:将Excel工作表保存为CSV,然后使用read.CSV读入,然后上述代码返回以下输出:
df1 <- read.csv("Journal_Conferences_Authors.csv", na.strings = "#N/A")
# output
# # A tibble: 427 × 2
# venue n
# <fctr> <int>
# 1 AAAI 4
# 2 ACC 4
# 3 ACIS-ICIS 5
# 4 ACM SIGSOFT Software Engineering Notes 1
# 5 ACM Southeast Regional Conference 5
# 6 ACM TIST 3
# 7 ACM Trans. Comput.-Hum. Interact. 3
# 8 ACML 2
# 9 ADMA 2
# 10 Advanced Visual Interfaces 3
# # ... with 417 more rows
使用dplyr和tidyr,将数据从宽改为长,然后按计数分组
library(dplyr)
library(tidyr)
gather(df1, key = author, value = name, -venue) %>%
select(venue, name) %>%
group_by(venue) %>%
summarise(n = n_distinct(name, na.rm = TRUE))
# # A tibble: 3 × 2
# venue n
# <chr> <int>
# 1 A 2
# 2 B 5
# 3 C 2
数据
编辑:将Excel工作表保存为CSV,然后使用read.CSV读入,然后上述代码返回以下输出:
df1 <- read.csv("Journal_Conferences_Authors.csv", na.strings = "#N/A")
# output
# # A tibble: 427 × 2
# venue n
# <fctr> <int>
# 1 AAAI 4
# 2 ACC 4
# 3 ACIS-ICIS 5
# 4 ACM SIGSOFT Software Engineering Notes 1
# 5 ACM Southeast Regional Conference 5
# 6 ACM TIST 3
# 7 ACM Trans. Comput.-Hum. Interact. 3
# 8 ACML 2
# 9 ADMA 2
# 10 Advanced Visual Interfaces 3
# # ... with 417 more rows
使用@zx8754数据进行测试,假设数据框中的空单元格具有NA,则此代码提供了所需的want:
sapply(split(df1[,-1], df1$venue), function(x) length(unique(x[!is.na(x)])))
# A B C
# 2 5 2
使用@zx8754数据进行测试,假设数据框中的空单元格具有NA,则此代码提供了所需的want:
sapply(split(df1[,-1], df1$venue), function(x) length(unique(x[!is.na(x)])))
# A B C
# 2 5 2
没用。如果我有一个场地的多行,它会带来两行不同的值。很抱歉,我没有意识到场地不明显,我编辑了答案。我发现了一个错误,我再次编辑,检查最后一个版本。在你的例子中,它应该返回:id=n,4=4,3=4,2=4,5=4 1=3我做得有点太快了,现在应该修好了,坏了。如果我有一个场地的多行,它会带来两行不同的值。很抱歉,我没有意识到场地不明显,我编辑了答案。我发现了一个错误,我再次编辑,检查最后一个版本。在你的例子中,它应该返回:id=n,4=4,3=4,2=4,5=4 1=3我做得有点太快了,现在应该修好了,对我没用。返回1X1表,其中包含所有items@ABueno请提供@ABueno对您的数据进行测试,解决方案运行良好,请参阅编辑,了解如何将您的文件读入R。返回1X1表,其中包含所有items@ABueno请在您的数据上提供@ABueno测试,解决方案工作正常,请参阅编辑,了解如何将文件读入R。它必须计算唯一值。结果必须是2B5C2sorry,然后应该是:sapplysplitdf1[,-1],df1$VICE,functionx lengthuniquex[!is.nax]。我将编辑它。它必须计算唯一值。结果必须是2B5C2sorry,然后应该是:sapplysplitdf1[,-1],df1$VICE,functionx lengthuniquex[!is.nax]。我会编辑它。