我试图以每个元素上的另一个帧为条件创建数据帧。
例如:
name="fname"
这将给我一个这样的数据框:
c0 <- c(0.1,0.2,0.5,.1)
c1 <- c(0.1,0.2,0.5,.1)
c2 <- c(0.1,0.2,0.5,.1)
c3 <- c(0.1,0.2,0.5,.1)
c4 <- c(0.1,0.2,0.5,.1)
df <- data.frame(c0,c1,c2,c3,c4)
colnames(df)<-c("A","B","C","D","E")
rownames(df)<-c("A","B","C","D")
现在我想查找是否有任何元素大于0.5 if else在新数据帧中替换为0:
> df
A B C D E
A 0.1 0.1 0.1 0.1 0.1
B 0.2 0.2 0.2 0.2 0.2
C 0.5 0.5 0.5 0.5 0.5
D 0.1 0.1 0.1 0.1 0.1
我想找回一个数据框,其中包含与此相同的mxn指标
> df.Indicator <- as.data.frame(lapply(as.matrix(df),function(x)
+ ifelse(x>=0.50,1,0)))
> df.Indicator
X0 X0.1 X1 X0.2 X0.3 X0.4 X1.1 X0.5 X0.6 X0.7 X1.2 X0.8 X0.9 X0.10 X1.3 X0.11 X0.12 X0.13 X1.4 X0.14
1 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0
这是一个简单的例子,但最终我想建立更多的条件。
谢谢!
答案 0 :(得分:1)
您需要的替换不需要lapply
或功能。请尝试以下代码。
df[df >= 0.5] <- 1
df[df != 1] <- 0
或其他人的建议。使用以下代码。
df <- (df >= 0.5) * 1
如果您真的想使用apply
家庭功能,这里是对原始代码的修改。使用apply
,而不是lapply
。
df <- as.data.frame(apply(df, 2, function(x) ifelse(x >= 0.5, 1, 0)))
以下是dplyr
包中的另一种解决方案。
library(dplyr)
df <- df %>% mutate_all(funs(ifelse(. >= 0.5, 1, 0)))
答案 1 :(得分:0)
谢谢大家。它实际上是as.matrix
语句,现在它可以根据需要工作,没有:
df.Indicator <- as.data.frame(lapply(df,function(x)
ifelse(x>=0.50,1,0)))
> df.Indicator
A B C D E
1 0 0 0 0 0
2 0 0 0 0 0
3 1 1 1 1 1
4 0 0 0 0 0
答案 2 :(得分:0)
数据输入
c0 <- c(0.1,0.2,0.5,.1)
c1 <- c(0.1,0.2,0.5,.1)
c2 <- c(0.1,0.2,0.5,.1)
c3 <- c(0.1,0.2,0.5,.1)
c4 <- c(0.1,0.2,0.5,.1)
df <- data.frame(c0,c1,c2,c3,c4)
colnames(df)<-c("A","B","C","D","E")
rownames(df)<-c("A","B","C","D")
A=data.frame(df>=0.5)
data.frame(lapply(A, as.numeric), stringsAsFactors=FALSE)
A B C D E
1 0 0 0 0 0
2 0 0 0 0 0
3 1 1 1 1 1
4 0 0 0 0 0