[英]using column numbers for grouping in data table rather than names in R
[英]plyr in r: using wildcard grouping OR removing numbers and preserving characters in grouping column
我正在使用plyr計算r中的均值和標准差。 但是,我的分組變量包含字母和數字的組合,因此我需要在分組變量中使用某種通配符,或者通過從原始分組變量中刪除數字來創建新的分組變量。 例如,使用以下數據幀:
test5 <- structure(list(A = structure(1:6, .Label = c("JCT1", "JCT2",
"JCT3", "LFR1", "LFR2", "LFR3"), class = "factor"), B = c(4L,
5L, 3L, 7L, 3L, 6L), C = structure(c(1L, 1L, 1L, 2L, 2L, 2L), .Label = c("JCT",
"LFR"), class = "factor")), .Names = c("A", "B", "C"), class = "data.frame", row.names = c(NA,
-6L))
A B C
1 JCT1 4 JCT
2 JCT2 5 JCT
3 JCT3 3 JCT
4 LFR1 7 LFR
5 LFR2 3 LFR
6 LFR3 6 LFR
我可以使用以下代碼來計算均值和sd:
library(plyr)
ddply(test5,~A,summarise,mean=mean(B),sd=sd(B))
這給出了一個結果
A mean sd
1 JCT1 4 NA
2 JCT2 5 NA
3 JCT3 3 NA
4 LFR1 7 NA
5 LFR2 3 NA
6 LFR3 6 NA
但是,我真的需要組是JCT
和LFR
,所以需要1)在代碼中使用通配符(因此組基於JCT
和LFR
,數字是通配符),或2)創建新列像我的原始數據框中的C
已刪除A
列中的數字。 例如,如果我可以創建這個新列C
那么我可以使用代碼
ddply(test5,~C,summarise,mean=mean(B),sd=sd(B))
產生我想要的結果
C mean sd
1 JCT 4.000000 1.000000
2 LFR 5.333333 2.081666
有誰知道一個簡單的方法來做到這一點? 我以為我可以使用ifelse語句以某種方式創建一個新的列C
,但這需要很多代碼,因為我在我的實際數據幀中有許多不同的值。 我希望有一個更快的方法。
謝謝!
你正在尋找這樣的東西嗎?
library(plyr)
test5$A <- gsub('[0-9]+', '', test5$A)
ddply(test5, .(A), summarise, mean=mean(B, na.rm = T), sd = sd(B, na.rm = T))
A mean sd
1 JCT 4.000000 1.000000
2 LFR 5.333333 2.081666
您可以使用regmatches
和regexpr
來提取字母,然后根據它進行匯總
> ddply(test5,.(letter=regmatches(A,regexpr("[A-Za-z]*",A))),
summarise,mean=mean(B),sd=sd(B))
letter mean sd
1 JCT 4.000000 1.000000
2 LFR 5.333333 2.081666
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.