我正在学习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)
任何建议将不胜感激!
答案 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))