【问题标题】:Using spread() in tidyr to pivot and drop NAs在 tidyr 中使用 spread() 来旋转和删除 NA
【发布时间】:2016-04-27 03:36:27
【问题描述】:

我正在使用 R 并且我有类似的数据

California | Los Angeles  
California | San Diego  
California | San Francisco  
New York | Albany  
New York | New York City  

我想转换成的

California | New York  
Los Angeles | Albany  
San Diego | New York City  
San Francisco | NA

我正在尝试在tidyr 中使用spread(),但不能完全按照我需要的方式给我输出。我能来的最接近的是

California | New York  
Los Angeles | NA  
San Diego | NA  
San Francisco | NA  
NA | Albany  
NA | New York City 

有人可以帮我把它弄成想要的格式吗?

【问题讨论】:

  • 你得到的输出(我假设来自spread(df, col1, col2))正是你对tidyr的期望。
  • v2 <- split(df$v2, df$v1) ; data.frame(lapply(v2, function(x){c(x, rep(NA, max(sapply(v2, length)) - length(x)))}))

标签: r tidyr


【解决方案1】:

这是我在 base 中的做法:

df<-data.frame(v1=c(rep("California",3), rep("New York",2)), v2=c("Los Angeles", "San Diego", "San Franciso", "Albany", "New York City"))

cali<-as.character(df[df$v1=="California", 2])
ny<-as.character(df[df$v1=="New York", 2])

new <- data.frame(California=cali, NewYork=c(ny, NA))

new
    California       NewYork
1  Los Angeles        Albany
2    San Diego New York City
3 San Franciso          <NA>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-13
    • 1970-01-01
    • 1970-01-01
    • 2018-07-27
    • 2019-05-19
    • 1970-01-01
    • 1970-01-01
    • 2015-06-05
    相关资源
    最近更新 更多