match.names(clabs,names(xi))中的错误:名称与以前的名称不匹配

时间:2018-11-20 09:26:00

标签: r rbind

  1. 我正在创建一个具有 5个年龄值的向量,并将其命名为 boys_age 。同样创建了一个名为girls_age的向量。

例如:

boys_age <- c(18,15,16,17,19)
girls_age<- c(16,14,18,17,15)
  1. 然后将两个向量附加rbind()以创建 data.frame ,这样我就得到了名为groupage的两列。

  2. boys_age girls_age 中的值应在列age中。 group列应具有类别值男孩/女孩,以标识源向量。

2 个答案:

答案 0 :(得分:3)

这是使用stack

的一种选择
out <- stack(list(boys = boys_age, girls = girls_age))
out
#   values   ind
#1      18  boys
#2      15  boys
#3      16  boys
#4      17  boys
#5      19  boys
#6      16 girls
#7      14 girls
#8      18 girls
#9      17 girls
#10     15 girls

现在更改名称

names(out) <- c("age", "group")
out
#   age group
#1   18  boys
#2   15  boys
#3   16  boys
#4   17  boys
#5   19  boys
#6   16 girls
#7   14 girls
#8   18 girls
#9   17 girls
#10  15 girls

由于@Sotos,您也可以在一行中完成相同的操作

setNames(stack(list(boys = boys_age, girls = girls_age)), c('age', 'group'))

答案 1 :(得分:2)

实际上,这是R中最重要的事情:

数据:

df1 <- data.frame(boys_age = c(18,15,16,17,19), girls_age = c(16,14,18,17,15))

代码:

library(data.table)
melt(setDT(df1), variable.name = "group", value.name = "age", measure.vars = c("boys_age", "girls_age"))[,2:1][,group:=sub("_.*$","",group)][]

结果:

#    age group
# 1:  18  boys
# 2:  15  boys
# 3:  16  boys
# 4:  17  boys
# 5:  19  boys
# 6:  16 girls
# 7:  14 girls
# 8:  18 girls
# 9:  17 girls
#10:  15 girls

您似乎很想使用?rbind :(虽然不切实际)

rbind(
    cbind.data.frame(age = df1$boys_age,  group = "boys"),
    cbind.data.frame(age = df1$girls_age,  group = "girls")
    )

#   age group
#1   18  boys
#2   15  boys
#3   16  boys
#4   17  boys
#5   19  boys
#6   16 girls
#7   14 girls
#8   18 girls
#9   17 girls
#10  15 girls
  • ?cbind部分中,我利用了R提供的回收功能。阅读有关它。
  • 我为什么使用cbind.data.frame,否则cbind会创建一个矩阵,因此年龄数字将转换为字符。