У меня есть такой фрейм данных с более чем 100 столбцами:
ID regulation press treat
1001 test1 0.2 b
1001 test1 1 c
1002 test2 2 s
1002 test2 3 s
1004 test1 4 s
1004 test1 5 f
1005 test2 6 w
1006 test2 6 u
1006 test2 1 h
У каждого идентификатора есть только одно правило, и только два возможных правила встречаются в базе данных (test1 и test2).
Я в основном хочу СУММИРОВАТЬ все уникальные вхождения идентификатора
Предполагаемый результат
test1: 2
test2: 3
Это означает, что test1 произошел в 2 уникальных идентификаторах, а test2 - в 3 уникальных идентификаторах.
2 ответа
Пытаться
rowSums(table(unique(df[, c("regulation", "ID")])))
# test1 test2
# 2 3
Или же
table(unique(df[,c('regulation', 'ID')])[,"regulation"])
# test1 test2
# 2 3
Или используя dplyr
library(dplyr)
count(unique(select(df, ID, regulation)), regulation)
#using the %>%, the above code would be
#df %>%
# select(ID, regulation)
# unique()
# count(regulation)
# regulation n
#1 test1 2
#2 test2 3
Данные
df <- structure(list(ID = c(1001L, 1001L, 1002L, 1002L, 1004L, 1004L,
1005L, 1006L, 1006L), regulation = c("test1", "test1", "test2",
"test2", "test1", "test1", "test2", "test2", "test2"), press = c(0.2,
1, 2, 3, 4, 5, 6, 6, 1), treat = c("b", "c", "s", "s", "s", "f",
"w", "u", "h")), .Names = c("ID", "regulation", "press", "treat"
), class = "data.frame", row.names = c(NA, -9L))
2:1
просто переставляет столбцы.
В дополнение к ответу Акруна, который отлично; вы можете легко сделать это, используя подход data.table
.
library(data.table)
dt <- data.table(df)
rowSums(table(unique(dt[,ID, regulation])))
#test1 test2
#2 3
Похожие вопросы
Новые вопросы
r
R — это бесплатный язык программирования с открытым исходным кодом и программная среда для статистических вычислений, биоинформатики, визуализации и общих вычислений. Пожалуйста, используйте минимально воспроизводимые примеры, которые другие могут запустить с помощью копирования и вставки. Показать желаемый результат. Используйте dput() для данных и укажите все небазовые пакеты с помощью library(). Не вставляйте изображения для данных или кода, вместо этого используйте блоки кода с отступом. Для вопросов по статистике используйте https://stats.stackexchange.com.