如何在R中对数据进行分段,以便仅包含我的一个变量设置为特定值的点?

时间:2014-06-28 10:48:43

标签: r dataframe

我使用的数据集包含16个变量和4,000多个案例。我希望将数据分段为一个单独的数据框,该数据框仅包含其中一个变量设置为0的情况。

如果我不清楚,这里有一个简单的例子,希望有助于说明我的问题:
Ana =红色,1
Beth =蓝色,0
Cate = green,3
大卫=黄色,0

我如何通过R对数据集进行分段以创建一个新的数据框,忽略第二个变量= 0的情况?在这个例子中,我将有一个仅包含Ana和Cate的新数据框。同样,我将如何做相反的事情,即只用Beth和David创建一个数据框?

感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

假设这是您的data.frame

m <- data.frame(names = c("Ana", "Beth", "Cate", "David"), 
  colors = c("blue", "blue", "green", "yellow"), numbers = c(1, 0, 3, 0))
m
#  names colors numbers
#1   Ana   blue       1
#2  Beth   blue       0
#3  Cate  green       3
#4 David yellow       0

如果我理解正确,这里有两种获得结果的方法

id <- which(m[,"numbers"] > 0)
m[id,]
#1   Ana   blue       1
#3  Cate  green       3

subset(m, numbers > 0)
#  names colors numbers
#1   Ana   blue       1
#3  Cate  green       3
subset(m, numbers == 0)
#  names colors numbers
#2  Beth   blue       0
#4 David yellow       0

答案 1 :(得分:0)

另一种方法是使用split,它会返回两个list的{​​{1}}个,其中一个用于data.frame的行和那些&#34;的数字&GT; 0&#34 ;.使用的一个技巧是R在将数字转换为逻辑值时如何处理数字:任何非零的内容都会变为numbers == 0

因此,使用@ javlacalle的示例数据,请尝试:

TRUE

您可以按索引位置或名称访问相关的out <- split(m, as.logical(m$numbers)) out # $`FALSE` # names colors numbers # 2 Beth blue 0 # 4 David yellow 0 # # $`TRUE` # names colors numbers # 1 Ana blue 1 # 3 Cate green 3

data.frame