-1

次のようなデータフレームがありますdata

data = data.frame(ID = as.factor(c("A", "A", "B","B","C","C")),
                  var.color= as.factor(c("red", "blue", "green", "red", "green", "yellow")))

ID各グループのレベルを(例: ABC) で取得し、それらを貼り付ける変数を作成することは可能でしょうか。私は以下を実行してそうしようとしました:

data  %>% group_by(ID) %>%
  mutate(ex = paste(droplevels(var.color), sep = "_"))

これにより、次の結果が得られます。

Source: local data frame [6 x 3]
Groups: ID [3]

      ID var.color     ex
  <fctr>    <fctr>  <chr>
1      A       red    red
2      A      blue   blue
3      B       green   red
4      B       red    red
5      C     green  green
6      C    yellow yellow

ただし、私の希望data.frameは次のようなものにする必要があります。

ID var.color     ex
  <fctr>    <fctr>  <chr>
1      A       red    red_blue
2      A      blue    red_blue
3      B       green    green_red
4      B       red    green_red
5      C     green    green_yellow
6      C    yellow    green_yellow
4

2 に答える 2

1

collapse基本的に、代わりに必要ですsep

レベルを落とす代わりに、テキストをグループ化して貼り付けることができますID

library(dplyr)
data  %>% group_by(ID) %>%
         mutate(ex = paste(var.color, collapse = "_"))

#     ID     var.color     ex
#    <fctr>    <fctr>     <chr>
#1      A       red     red_blue
#2      A      blue     red_blue
#3      B     green     green_red
#4      B       red     green_red
#5      C     green     green_yellow
#6      C    yellow     green_yellow
于 2016-09-29T08:43:42.253 に答える
1

ループを使用して同じことを行うことができます

for(i in unique(data$ID)){
  data$ex[data$ID==i] <- paste0(data$var.color[data$ID==i], collapse = "_")
}

> data
  ID var.color           ex
1  A       red     red_blue
2  A      blue     red_blue
3  B     green    green_red
4  B       red    green_red
5  C     green green_yellow
6  C    yellow green_yellow
于 2016-09-29T10:08:53.260 に答える