我有一个包含几个变量的数据集,我希望单独统计测试每个变量的方差(Kruskal-test)。
我的数据(df)看起来像:(不同农业管理层的碳和氮含量(见名称))。 我有16个小组(为了简化它,我说,我有8个小组):
数据摘录
1. List item
name N_cont C_cont agriculture
C_ero 1,064 8,380 1
C_ero 0,961 8,086 1
C_ero 0,977 8,331 1
Ds_ero 1,767 17,443 2
Ds_ero 1,802 18,264 2
Ds_ero 2,083 20,112 2
Ms_ero 1,547 14,380 3
Ms_ero 1,566 15,313 3
Ms_ero 1,505 14,760 3
Md_ero 1,512 14,303 4
Md_ero 1,656 15,331 4
Md_ero 1,500 13,788 4
C_upsl 1,121 10,581 5
C_upsl 1,159 10,460 5
C_upsl 1,223 10,171 5
Ds_upsl 1,962 20,656 6
Ds_upsl 1,784 16,780 6
Ds_upsl 1,720 17,482 6
Ms_upsl 1,578 16,228 7
Ms_upsl 1,634 15,331 7
Ms_upsl 1,394 13,419 7
Md_upsl 1,286 11,824 8
Md_upsl 1,241 11,452 8
Md_upsl 1,317 11,932 8
我已经为农业提出了一个因素
df$agriculture<-factor(df$agriculture)
我可以对所有16组进行统计测试。
例如kruskal.test(df$C,df$agriculture)
但是现在我想对8组中的特定组进行统计测试,例如包含例如C
列中的DS
(常规)或更确切name
(直接播种)
或者例如ero
(侵蚀网站)或upsl
(上坡)
它确实尝试grep
或split
,但它不起作用,因为x和y的维度应该相同。
你有任何线索吗?
答案 0 :(得分:1)
您可以尝试使用grepl
进行子集化。假设您需要名称中包含DS
,upsl
或C
的行,那么
df[grepl("(DS)|(upsl)|(C)", df$name), ]
# name N_cont C_cont agriculture
#1 C_ero 1,064 8,380 1
#2 C_ero 0,961 8,086 1
#3 C_ero 0,977 8,331 1
#13 C_upsl 1,121 10,581 5
#14 C_upsl 1,159 10,460 5
#15 C_upsl 1,223 10,171 5
#16 Ds_upsl 1,962 20,656 6
#17 Ds_upsl 1,784 16,780 6
#18 Ds_upsl 1,720 17,482 6
#19 Ms_upsl 1,578 16,228 7
#20 Ms_upsl 1,634 15,331 7
#21 Ms_upsl 1,394 13,419 7
#22 Md_upsl 1,286 11,824 8
#23 Md_upsl 1,241 11,452 8
#24 Md_upsl 1,317 11,932 8
如果您不想对name
值进行硬编码,也可以尝试
x <- c("C", "DS", "upsl")
df[grepl(paste0(x, collapse = "|"), df$name), ]
也会产生相同的结果。
答案 1 :(得分:0)
加载data.table
包。
library(data.table)
创建您要执行统计信息的组的子集: 如果你的数据帧是df,那么
DT<-data.table(df)
DT[like(name,"C_")]
..或使用sqldf
包:
library(sqldf)
sqldf("select * from df where name like 'C_'")