数据为:
df1<-read.table(text=" Car1 Car2 Car3 Group1 Group2 Group3 Code1 Code2 Code3
N M M A A A B B B
Q M M B B A A A B
Q N Q A A B A B B
N P P A A A A B A
N M Q A B A B A A
M Q P B A A B B A
N M N B A A A B A
N N M B B B A B A
Q Q P A B B B A A
N Q M A B A B A A
",header=TRUE)
我想获取显示Car1的Group1和Code 1,Car2的Group2和Code 2以及Car3的Group3和Code 3的表格 对于Car1的Group1和代码1,我将获得Car1的下表:
Car1 Car_A Car_B Group_A Group_B
M M 0 1 0 1
N N 4 2 3 3
Q Q 2 1 2 1
我想循环使用例如lapply获得3个表。
我已经尝试过了,但是我无法获取表格
df2<-lapply(1:3, function(i) as.data.frame.matrix(table(paste0('Car', i, ' ~ ', 'Group', i)), data = df1))
答案 0 :(得分:1)
您可以使用问题中已经显示的lapply
。
lapply(1:3, function(i) cbind(
table(df1[,c(paste0('Car', i), paste0('Group', i))])
, table(df1[,c(paste0('Car', i), paste0('Code', i))])))
#[[1]]
# A B A B
#M 0 1 0 1
#N 4 2 3 3
#Q 2 1 2 1
#
#[[2]]
# A B A B
#M 2 2 2 2
#N 1 1 0 2
#P 1 0 0 1
#Q 1 2 2 1
#
#[[3]]
# A B A B
#M 3 1 2 2
#N 1 0 1 0
#P 2 1 3 0
#Q 1 1 1 1
还有名字。
lapply(1:3, function(i) {
t1 <- table(df1[,c(paste0('Car', i), paste0('Group', i))])
t2 <- table(df1[,c(paste0('Car', i), paste0('Code', i))])
dimnames(t1) <- lapply(1:2, function(i) paste(names(dimnames(t1))[i], dimnames(t1)[[i]], sep="_"))
dimnames(t2) <- lapply(1:2, function(i) paste(names(dimnames(t2))[i], dimnames(t2)[[i]], sep="_"))
cbind(t1, t2)
})
#[[1]]
# Group1_A Group1_B Code1_A Code1_B
#Car1_M 0 1 0 1
#Car1_N 4 2 3 3
#Car1_Q 2 1 2 1
#
#[[2]]
# Group2_A Group2_B Code2_A Code2_B
#Car2_M 2 2 2 2
#Car2_N 1 1 0 2
#Car2_P 1 0 0 1
#Car2_Q 1 2 2 1
#
#[[3]]
# Group3_A Group3_B Code3_A Code3_B
#Car3_M 3 1 2 2
#Car3_N 1 0 1 0
#Car3_P 2 1 3 0
#Car3_Q 1 1 1 1
或者解决方案更改了df1
df1 <- as.data.frame(sapply(names(df1)
, function(i) paste(i ,df1[,i], sep="_")))
lapply(1:3, function(i) cbind(
table(df1[,c(paste0('Car', i), paste0('Group', i))])
, table(df1[,c(paste0('Car', i), paste0('Code', i))])))
#[[1]]
# Group1_A Group1_B Code1_A Code1_B
#Car1_M 0 1 0 1
#Car1_N 4 2 3 3
#Car1_Q 2 1 2 1
#
#[[2]]
# Group2_A Group2_B Code2_A Code2_B
#Car2_M 2 2 2 2
#Car2_N 1 1 0 2
#Car2_P 1 0 0 1
#Car2_Q 1 2 2 1
#
#[[3]]
# Group3_A Group3_B Code3_A Code3_B
#Car3_M 3 1 2 2
#Car3_N 1 0 1 0
#Car3_P 2 1 3 0
#Car3_Q 1 1 1 1