2015-03-17 3 views
2

Я совершенно новый для R, и я в основном изучаю, посещая эти сайты Q &. Сначала я хотел опубликовать комментарий по предыдущему вопросу, частично ответивший на мой вопрос, но не смог избавиться от моей репутации, поскольку я только что стал участником.Как создать новый столбец в R, который учитывает уникальные значения

Ссылка на вопрос: https://stackoverflow.com/a/16160671/4681908

То, что я хочу сделать, это создать новый столбец, который подсчитывает уникальные значения для varialbe в моем наборе данных для уникальных идентификаторов. Вместо получения списка в виде следующего кода:

with(mydf, tapply(Spp, Cnty, FUN = function(x) length(unique(x)))) 

, я хотел бы ввести его в новую переменную. Может ли кто-нибудь помочь мне с этим? Я извиняюсь за любой недостаток информации, и спасибо заранее

+0

Использование 'ave' и конвертировать' Spp' в 'character' как в' с (mydf, пр (как. character (Spp), Cnty, FUN = function (x) length (unique (x)))) ' –

+0

@DavidArenburg Но это вернет выход символа. Поскольку 'Spp' уже является фактором, лучше преобразовать в' numeric', чтобы возвращать числовые значения – akrun

+0

@arkrun, да, 'as.numeric' также может быть использован. Я просто хотел проиллюстрировать одну возможность. Хотя, похоже, вы также добавили это. Я уверен, что это какой-то тип обмана, который все равно должен быть закрыт. –

ответ

4

Try n_distinct из dplyr

library(dplyr) 
mydf %>% group_by(Cnty) %>% mutate(Count=n_distinct(Spp)) 

Или uniqueN из data.table

library(data.table) 
setDT(mydf)[,Count:=uniqueN(Spp) ,by = Cnty][] 

Или использовать ave вместо tapply. Как 'Spp' столбец 'фактор', вы можете использовать 'as.numeric'

mydf$Count <- with(mydf, ave(as.numeric(Spp), Cnty, 
         FUN=function(x) length(unique(x)))) 
+2

mydf $ Count <- with (mydf, ave (as.numeric (Spp), Cnty, FUN = function (x) length (unique (x)))) Работал отлично. огромное спасибо – Ole

Смежные вопросы