Как разделить столбцы по значению строки - PullRequest
1 голос
/ 01 мая 2019

Я изучаю 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 ]

1 голос
/ 01 мая 2019

Простой вариант будет использовать:

df2 = df1[, which(df1["Value3",] > 4)]
0 голосов
/ 01 мая 2019

Один вариант будет использовать split.default в базе R. Сначала мы подставим строку, где SampleID равно "Value3", сравним значение с 4 и получим список из двух кадров данных, один со значением больше 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))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...