2015-11-20 3 views
0

Я хочу иметь несколько копий кадра данных, но каждый раз с новой рандомизацией переменной. Моя цель заключается в том, чтобы сделать несколько итераций анализа со случайным значением для одной переменной.Рандомизация столбца в списке dataframe

Я начал, делая список dataframe, копии моей оригинальной dataframe:

a <- c(1, 2, 3, 4, 5) 
b <- c(45, 34, 50, 100, 64) 
test <- data.frame(a, b) 
test2 <- lapply(1:2,function(x) test) #List of 2 dataframe, identical to test 

Я знаю о преобразующих и образца, для рандомизации значений столбца:

test1 <- transform(test, a = sample(a)) 

Я просто не могу найти, как применить его ко всему списку данных. Я пробовал:

test3<- lapply(test2,function(i) sample(i[["a"]])) 

Но я потерял другие переменные. И это:

test3 <- lapply(test2,function(i) {transform(i, i[["a"]]==sample(i[["a"]]))}) 

Но моя переменная не рандомизирована.

Несколько вопросов похожи на мои, но не помогло мне решить мою проблему:

Adding columns to each in a list of dataframes

Add a column in a list of data frames

ответ

1

Вы можете попробовать следующее:

lapply(test2, function(df) {df$a <- sample(df$a); df}) 

Или , используя transform:

lapply(test2, function(df) transform(df, a = sample(a))) 

Или просто

lapply(test2, transform, a = sample(a)) 
+0

Все эти работы чудесно! Спасибо. – Emilie

0

Есть ли причина, что вам нужно их в отдельных списках?

Это даст вам 10 столбцов рандомизированных выборок a в разных столбцах, а затем вы можете пройти через столбцы для дальнейшего анализа.

a <- c(1, 2, 3, 4, 5) 
b <- c(45, 34, 50, 100, 64) 
test <- data.frame(a, b) 

for(i in 3:12){ 
test[,i] <- transform(sample(a)) 
} 

`

+0

Ваше решение является аккуратным, но мне нужно было бы в разных кадрах данных – Emilie

Смежные вопросы