2015-02-28 1 views
2

действительно понравится!Подсчеты и длины символов для отдельных столбцов в большом информационном кадре

У меня есть dataframe, это 400000 obs на 12 переменных (столбцов) с буквенно-цифровой информацией. Чтобы упростить, скажем, это два столбца в кадре данных. Col1 = A, B, A, C, E, A, B, C Col2 = AAAA, BB, CCCCCC, AAA, BB, CC, AAAA, BB, CCCCCC

  1. Want выход, который создает среднее значение длины всех значений (например, «AAAA» = длина равно 4) в столбце 2 для каждого значения столбца 1. Пример: для значения «a» в col1 выход будет равен 4 (AAAA = 4; CCCCCC = 6, CC = 2, среднее значение = 4).

  2. Хочет выход, который дает мне количество раз конкретное значение в седловине 2 существует в целом набор данных - но хочет это subsetted значений столбца 1.

Спасибо за все ваши Помогите!

ответ

0

Вот моя попытка. str_count(Col2, ".") подсчитывает, сколько букв существует. Таким образом, я измерил длину строки. Затем я сгруппировал данные по Col1 и вычислил среднее значение. Это для первой части. Что касается 2-й части, я использовал count() в пакете dplyr. Надеюсь, это то, что вы имели в виду.

library(stringr) 
library(dplyr) 

# For the first part 
mutate(mydf, num = str_count(Col2, ".")) %>% 
group_by(Col1) %>% 
summarise(num.Ave = sum(num)/n()) 

# Col1 num.Ave 
#1 a  4.0 
#2 b  3.0 
#3 c  2.5 
#4 e  2.0 

# For the 2nd part 

count(mydf, Col1, Col2) 

# Col1 Col2 n 
#1 a AAAA 1 
#2 a  CC 1 
#3 a CCCCCC 1 
#4 b AAAA 1 
#5 b  BB 1 
#6 c AAA 1 
#7 c  BB 1 
#8 e  BB 1 

DATA

mydf <- structure(list(Col1 = c("a", "b", "a", "c", "e", "a", "b", "c" 
), Col2 = c("AAAA", "BB", "CCCCCC", "AAA", "BB", "CC", "AAAA", 
"BB")), .Names = c("Col1", "Col2"), row.names = c(NA, -8L), class = "data.frame") 

# mydf 
# Col1 Col2 
#1 a AAAA 
#2 b  BB 
#3 a CCCCCC 
#4 c AAA 
#5 e  BB 
#6 a  CC 
#7 b AAAA 
#8 c  BB 
+0

@Nina Спасибо за ваш комментарий. После публикации моего предложения я подумал, что использование 'nchar' будет. 'mutate (mydf, num = nchar (Col2))'. Что касается вашего вопроса о статистике, я не уверен, как выглядят ваши фактические данные. Поэтому я боюсь, что не могу ответить. – jazzurro

+0

Спасибо! Первое решение работало хорошо! Удивление, если вы знаете, как я могу добавить некоторые статистические данные с этим средним значением - так что получите среднее значение t-test, стандартное отклонение и т. Д. Для каждого среднего значения. Второе решение хорошо работает! Я пытаюсь сортировать по df, который генерирует код счета, и я продолжаю получать странные вещи. Ex. я сделал > count = count (set, Col1, Col2) > sortedcount = count [order ("Col2")] Это дало мне только Col2 и оформлено в заказе. Это дало мне только одну строку целого df. sortedcount = count [order ("Col2"),] Я знаю, что это должно быть так просто, но просто не может понять, как это сделать! – Nina

+0

@Nina Прошу прощения за этот поздний ответ. У меня не было времени посвятить себя SO в течение нескольких дней. Что касается второй части, вы можете использовать 'arr()' from 'dplyr'. Не могли бы вы попробовать следующее? 'count (mydf, Col1, Col2)%>% ungroup%>% arr (Col2)' – jazzurro

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