match.names(clabs, names(xi)) 中的错误:名称与以前的名称不匹配
Error in match.names(clabs, names(xi)) : names do not match previous names
- 我正在创建一个具有 5 个年龄值 的向量,并将其命名为 boys_age。同样创建了一个名为
girls_age
的向量。
例如:
boys_age <- c(18,15,16,17,19)
girls_age<- c(16,14,18,17,15)
然后追加 rbind()
两个向量以创建 data.frame 这样我就有两列名为 group
和age
。
来自 boys_age 和 girls_age 的值应该在列 age
。 group
列应具有类别值 boys/girls,以标识源向量。
这是一个使用 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'))
它实际上是 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 会创建一个矩阵,因此年龄数字会被转换为字符。
- 我正在创建一个具有 5 个年龄值 的向量,并将其命名为 boys_age。同样创建了一个名为
girls_age
的向量。
例如:
boys_age <- c(18,15,16,17,19)
girls_age<- c(16,14,18,17,15)
然后追加
rbind()
两个向量以创建 data.frame 这样我就有两列名为group
和age
。来自 boys_age 和 girls_age 的值应该在列
age
。group
列应具有类别值 boys/girls,以标识源向量。
这是一个使用 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'))
它实际上是 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 会创建一个矩阵,因此年龄数字会被转换为字符。