R 如何分析一个数据帧并获得另一个值大于0.05的数据帧?
我有一个数据框,具有不同的p.value值,包括缺失值(NA): pvalue 2=pvalue[1:679,3:10] 我需要分析它,大于0.05的数字,我需要写出小于0.05的“正常”e值,我需要写出这个值。我希望将结果写入另一个数据帧中。 这是我的代码:R 如何分析一个数据帧并获得另一个值大于0.05的数据帧?,r,dataframe,R,Dataframe,我有一个数据框,具有不同的p.value值,包括缺失值(NA): pvalue 2=pvalue[1:679,3:10] 我需要分析它,大于0.05的数字,我需要写出小于0.05的“正常”e值,我需要写出这个值。我希望将结果写入另一个数据帧中。 这是我的代码: a=data.frame() for (i in 1:nrow(pvalue2)) { for (j in 1:ncol(pvalue2)){ if (pvalue2[i,j] >=0.05) {
a=data.frame()
for (i in 1:nrow(pvalue2)) {
for (j in 1:ncol(pvalue2)){
if (pvalue2[i,j] >=0.05) {
print (a[i,j]=="Normal")
} else {print a[i,j]==pvalue2[i,j] }
}
}
有人能帮我吗?假设您的第一个数据帧名为df
df_2<-data.frame(matrix(nrow=nrow(df),ncol=ncol(df)));
for (i in 1:ncol(df)){
df_2[,i]<-ifelse(is.na(df[,i]) == FALSE && df[,i] >= .05,"Normal",ifelse(is.na(df[,i])==FALSE && df[,i] < 0.05,df[,i],NA))
}
df_2set.seed(42)
df我想,你的p值被存储为因子。首先需要将它们转换为数值
tmp <- sapply(pvalue2, function(x) as.numeric(as.character(x)))
不应该是df_2@Rcoster为什么?df_2是输出将到达的帧,df是包含pvalues的帧当我使用此代码时,我有以下警告消息:1:在运算因子中(df[,i],0.05):>=对因子没有意义2:在运算因子中(df[,i],0.05):>=对因子3没有意义:在运算因子中(df[,i],0.05):>=对系数4无意义:在运行中系数(df[,i],0.05):>=对系数5无意义:在运行中系数(df[,i],0.05):>=对系数6无意义:在运行中系数(df[,i],0.05):>=对系数7无意义:在运行中系数(df[,i],0.05):>=对于因子没有意义,而且结果是一个缺少值的数据帧。将df[,i]的出现转换为as.numeric(df[,i])谢谢,但它不起作用。我真的不知道为什么。我有一个所有值都是“正常”的数据框。谢谢,但是用这个解决方案,我只有一个缺少值的数据框。我不明白我的r发生了什么。您的解决方案中的数据框架起作用,但我不这样做。
> set.seed(123)
> pvalue2 <- matrix(runif(18)/10, 6, 3)
> pvalue2[sample(length(pvalue2), 4)] <- NA
> pvalue2 <- as.data.frame(pvalue2)
> pvalue2
V1 V2 V3
1 0.02875775 0.05281055 0.067757064
2 0.07883051 0.08924190 0.057263340
3 0.04089769 0.05514350 NA
4 0.08830174 0.04566147 0.089982497
5 0.09404673 NA NA
6 NA 0.04533342 0.004205953
> ifelse(as.matrix(pvalue2) < .05, as.matrix(pvalue2), "normal")
V1 V2 V3
[1,] "0.0287577520124614" "normal" "normal"
[2,] "normal" "normal" "normal"
[3,] "0.04089769218117" "normal" NA
[4,] "normal" "0.0456614735303447" "normal"
[5,] "normal" NA NA
[6,] NA "0.0453334156190977" "0.00420595335308462"
set.seed(42)
df <- data.frame(a=runif(10,0,0.1),b=runif(10,0,0.1))
#since there are only numeric values
#you can transform to matrix
m <- as.matrix(df)
#new matrix
m2 <- m
m2[m>0.05] <- "Normal"
df2 <- as.data.frame(m2)
a b
1 Normal 0.045774177624844
2 Normal Normal
3 0.0286139534786344 Normal
4 Normal 0.0255428824340925
5 Normal 0.0462292822543532
6 Normal Normal
7 Normal Normal
8 0.013466659723781 0.0117487361654639
9 Normal 0.0474997081561014
10 Normal Normal
tmp <- sapply(pvalue2, function(x) as.numeric(as.character(x)))
# copy the existing data frame to a new object
df2 <- pvalue2
# fill it with "Normal"
df2[ , ] <- "Normal"
# replace with values from tmp if value < 0.05
df2[tmp < 0.05] <- pvalue2[tmp < 0.05]