如何按行值拆分列

时间:2019-05-01 00:02:03

标签: r

我正在学习R,并且有一个我很好奇的简单问题。 我有一个像下面这样的数据框:

Sample ID:        A  B  C   D   E   F
Value1            8  3  4   8   9   2
Value2            8  1  7   7   6   1
Value3            9  3  5   8   3   2

我想按其Value3拆分此数据框中的列。例如,我想将Value3大于4的所有样本放入单独的数据帧中。因此,例如,我想在新的数据框中获得此值(所有的Value3> 4样本):

Sample ID:      A   C   D
Value1          8   4   8
Value2          8   7   7
Value3          9   5   8

是否有一种简单的方法可以在R中执行此操作?这是我尝试过的方法,但似乎不起作用:

library(tidyverse)    

data <- read.csv("sampledata.csv")
filtered_data <- filter(data, Value3 > 4)

任何建议将不胜感激!

2 个答案:

答案 0 :(得分:1)

一个简单的选择是使用:

df2 = df1[, which(df1["Value3",] > 4)]

答案 1 :(得分:0)

一个选项是在基数R中使用split.default。我们首先对SampleID"Value3"的行进行子集,将值与4比较,并获得两个值大于1的数据帧的列表。 4,而另一个值小于4。

split.default(df[-1], df[df$SampleID == "Value3", -1] > 4)

#  B E F
#1 3 9 2
#2 1 6 1
#3 3 3 2

#$`TRUE`
#  A C D
#1 8 4 8
#2 8 7 7
#3 9 5 8

数据

df <- structure(list(SampleID = structure(1:3, .Label = c("Value1", 
"Value2", "Value3"), class = "factor"), A = c(8L, 8L, 9L), B = c(3L, 
1L, 3L), C = c(4L, 7L, 5L), D = c(8L, 7L, 8L), E = c(9L, 6L, 
3L), F = c(2L, 1L, 2L)), class = "data.frame", row.names = c(NA, -3L))