0
我有一个数据帧“DF”,其中,第一四列是用于在列S1中的四个独特的字符串的计数数据到S10如何通过不同的组的发生比较在r中
DF = read.table(text="AA BB AB NC S1 S2 S3 S4 S5 S6 S7 S8 S9 S10
R1 0 5 5 0 BB AB AB BB AB AB BB BB BB AB
R2 5 0 4 1 AB AA AB AB AA AA AB NC AA AA
R3 1 7 2 0 AA AB BB BB BB BB BB BB AB BB
R4 4 0 1 5 AA AA AB NC NC AA NC AA NC NC
R5 0 5 3 2 AB BB AB AB BB BB NC BB NC BB
R6 4 4 1 1 AB BB AA AA BB AA AA BB BB NC", header=T, stringsAsFactors=F)
替换数据
首先,我会测试列“AA”和列“BB”的数量的比率,以找出哪些行的数据需要被替换。
pvalue <- apply(DF[,c("AA","BB")], 1, function(x) {
chisq.test(as.vector(x), p = c(0.5,0.5))$p.value
})
pvalue
所以需要在R1至R5的一些数据,如果p值< = 0.05更换。 列“AB”和“NC”之间数字最大的字符串将更改为“AA”和“BB”之间数字最小的字符串 例如,在R1行中,最大的数字是列“ AB“和”NC“列之间,最低的数字是列”AA“和”BB“之间的列”AA“,因此列S1到S10中的字符”AB“将被更改为 ”AA“ 对于R2,改变 “AB” 到 “BB”, 为R3,改变 “AB” 到 “AA” 为R4,改变 “NC” 到 “BB” ....
所以预期的结果是:
S1 S2 S3 S4 S5 S6 S7 S8 S9 S10
R1 BB AA AA BB AA AA BB BB BB AA
R2 BB AA BB BB AA AA BB NC AA AA
R3 AA AA BB BB BB BB BB BB AA BB
R4 AA AA AB BB BB AA BB AA BB BB
R5 AA BB AA AA BB BB NC BB NC BB
R6 AB BB AA AA BB AA AA BB BB NC
这有点复杂。感谢您的帮助。
在最后一个解决方案中,如果计数数字(DF中的前四列)也需要更新,那么在代码中如何实现? – user3354212
AA,BB,AB和NC应该如何?在'gsub'指令'x [1:4] < - c('A','B','C','D')'之后的'apply'函数中替换前4个列... –