Вопрос по r – Случайный выбор строки в R

6

У меня есть этот датафрейм

<code>id <- c(1,1,1,2,2,3)
name <- c("A","A","A","B","B","C")
value <- c(7:12)
df<- data.frame(id=id, name=name, value=value)
df
</code>

Эта функция выбирает случайную строку из нее:

<code>randomRows = function(df,n){
  return(df[sample(nrow(df),n),])
}
</code>

то есть

<code>randomRows(df,1)
</code>

Но я хочу случайным образом выбрать одну строку для каждого имени. (или для каждого идентификатора) и объединить всю эту строку в новую таблицу, так что в этом случае три строки. Это должно зацикливаться на 2000+ строк данных. Пожалуйста, покажи мне, как ?!

Ваш Ответ

2   ответа
2

Я думаю, что вы можете сделать это сplyr пакет:

library("plyr")
ddply(df,.(name),randomRows,1)

который дает вам, например:

  id name value
1  1    A     8
2  2    B    11
3  3    C    12

Это то, что вы ищите?

Добро пожаловать. Можете ли вы принять ответ, чтобы другие знали, что на вопрос дан ответ?
Мой хороший человек, который делает именно то, что я ищу! Очень аккуратная функция. Спасибо! Bernard
2

Вот один из способов сделать это в базе R.

> df.split <- split(df, df$name)
> df.sample <- lapply(df.split, randomRows, 1)
> df.final <- do.call("rbind", df.sample)
> df.final
  id name value
A  1    A     7
B  2    B    11
C  3    C    12

Похожие вопросы