使用lapply或其他函数以另一个数据帧R为条件创建数据帧

时间:2017-05-19 18:57:48

标签: r lapply

我试图以每个元素上的另一个帧为条件创建数据帧。

例如:

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

这是一个简单的例子,但最终我想建立更多的条件。

谢谢!

3 个答案:

答案 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