'How do I create a list containing new data frames from an existing data frame?

I have a csv file containing 5 columns, 225 rows containing my data. The columns pertain to the experiments' Subject_ID, treatment (9 types), replicate(5), time (5) and output. I would like to organize my data such new data frames are created according to the treatment and have the data frames stored within a list.

Here is an example of the table:

Subject ID Treatment Replicate Time Output
Human 1 a 1 0 y1
Human 2 b 1 0 y2
Human 1 b 2 2 y3
Human 2 a 2 2 y4

This is my code:


df$Strain<- as.character(df$Subject_ID)
df$Time<- as.character(df$Time)
df$Replicate<- as.character(df$Replicate)


#Create a list of new data frames by treatments
Treatments.list <- list()
for (i in 1:length(unique(df$Treatment))) {
  
  Treatments <- filter(df, Treatment == i)
  
  Treatments.list [[i]] <- cbind.data.frame(Treatments[1:5])
  
}

My problem with this code is that the list that is returned is a list of 9 (which is correct) with all of the columns, but they are empty. How do I fix this?

Also I have tried:

for (i in (unique(df$Treatment))

instead of the one above and it works, however, the i only returns one value of the treatments, instead of 9.

Thanks for the help in advance!



Solution 1:[1]

df=read.table(text="
Subject ID  Treatment   Replicate   Time    Output
Human 1 a   1   0   y1
Human 2 b   1   0   y2
Human 1 b   2   2   y3
Human 2 a   2   2   y4",h=T)

split(df,df$Treatment)

which results in

$a
  Subject ID Treatment Replicate Time Output
1   Human  1         a         1    0     y1
4   Human  2         a         2    2     y4

$b
  Subject ID Treatment Replicate Time Output
2   Human  2         b         1    0     y2
3   Human  1         b         2    2     y3

so works for me, the result is a list with two elements.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 user2974951