首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何对数据帧中的列进行排序,以使行中的所有相同字符串都位于同一列中

如何对数据帧中的列进行排序,以使行中的所有相同字符串都位于同一列中
EN

Stack Overflow用户
提问于 2019-10-28 22:22:29
回答 1查看 79关注 0票数 2

我有一个非常大的数据帧,有63列和1697行。行的末尾填满了NAs,但我希望行中的匹配值位于同一列中,并将NAs插入到空白处。

有点像这样(更新):

代码语言:javascript
复制
v1 <- c("v1","v1","v1","v1","v1","v1","v1")
v2 <- c("v3","v2","v2","NA","v2","v2","v2")
v3 <- c("v4","v4","v3","NA","v3","v3", "v3")
v4 <- c("v5","v5","v4","NA","v5","v4","NA")
v5 <- c("NA","NA","v5","NA","v6","v6", "NA")
v6 <- c("NA","NA","v6","NA","v7","v7","NA")
v7 < - c("NA","NA","NA","NA","NA","NA","NA")
df <- data.frame(v1,v2,v3,v4,v5,v6,v7)

df

  v1 v2 v3 v4 v5 v6 v7
1 v1 v3 v4 v5 NA NA NA
2 v1 v2 v4 v5 NA NA NA
3 v1 v2 v3 v4 v5 v6 NA
4 v1 NA NA NA NA NA NA
5 v1 v2 v3 v5 v6 v7 NA
6 v1 v2 v3 v4 v6 v7 NA
7 v1 v2 v3 NA NA NA NA

但我希望所有的东西都像这样对齐:

代码语言:javascript
复制
  v1 v2 v3 v4 v5 v6 v7
1 v1 NA NA v4 v5 NA NA
2 v1 v2 NA v4 v5 NA NA
3 v1 v2 v3 v4 v5 v6 NA
4 v1 NA NA NA NA NA NA
5 v1 v2 v3 NA v5 v6 v7 
6 v1 v2 v3 v4 NA v6 v7 
7 v1 v2 v3 NA NA NA NA

我尝试过map.values(),结果并不像预期的那样,还有一个ifelse(),但这一切都需要我输入特定的单元格数据并进行更改。

列名确实与单元格名称匹配。

我想把数据放到一个缺席图中,所以我想在我可以

代码语言:javascript
复制
for (i in 1:63){
gsub("NA", 0, df[,i]}

然后对于任何包含"v“的东西都是一样的,因为存在或不存在都有一个二进制1或0,但它们必须对齐

没有管理数据的预定义规则,数据帧是从许多其他.csv文件聚合在一起的,这是目前我能得到的最好的格式。

任何帮助都将不胜感激!

EN

回答 1

Stack Overflow用户

发布于 2019-10-29 00:51:06

已更新答案以匹配新的输入数据

Data

我删除了NA中的引号:

代码语言:javascript
复制
v1 <- c("v1","v1","v1","v1","v1","v1","v1")
v2 <- c("v3","v2","v2",NA,"v2","v2","v2")
v3 <- c("v4","v4","v3",NA,"v3","v3", "v3")
v4 <- c("v5","v5","v4",NA,"v5","v4",NA)
v5 <- c(NA,NA,"v5",NA,"v6","v6", NA)
v6 <- c(NA,NA,"v6",NA,"v7","v7",NA)
v7 <- c(NA,NA,NA,NA,NA,NA,NA)
df <- data.frame(v1,v2,v3,v4,v5,v6,v7, stringsAsFactors = F)

代码

代码语言:javascript
复制
l <- list()
u <- c("v1", "v2", "v3", "v4", "v5", "v6", "v7")
h <- NULL
for(k in 1:nrow(df)){
  # create a list for each row of the df
  l[[k]] <- df[k, ]
  for(i in 1:length(l[[k]])){
    #check if number exists in the row
    if(u[i] %in% l[[k]]){
      # find the index of the number given it exists
      a <- which(l[[k]] == u[i])
      #assign to "help" vector in order to not overwrite values 
      h[i] <- l[[k]][a]
    }
    else{
      #numbers that do not exist in the vector are asigned NA
      h[i] <- NA
    }
  }
  #replace row by sorted vector with NA place holders ("help" vector)
  l[[k]] <- h
}

结果

代码语言:javascript
复制
df1 <- as.data.frame(do.call(rbind, l))
df1
  V1 V2 V3 V4 V5 V6 V7
1 v1 NA v3 v4 v5 NA NA
2 v1 v2 NA v4 v5 NA NA
3 v1 v2 v3 v4 v5 v6 NA
4 v1 NA NA NA NA NA NA
5 v1 v2 v3 NA v5 v6 v7
6 v1 v2 v3 v4 NA v6 v7
7 v1 v2 v3 NA NA NA NA
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58592662

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档