【问题标题】:Create vector of attributes for each row in data frame [duplicate]为数据框中的每一行创建属性向量[重复]
【发布时间】:2017-04-29 17:51:22
【问题描述】:

假设我们有数据框

attr1 | attr2
----- | -----
  1   |   2
  2   |   0

现在,对于我们数据框中的每一行,我想创建一个包含attr1attr2 的向量。这个向量不应该是一个字符串表示,而是一个包含这些数字的实际向量。

想要的结果是这样的:

attr1 | attr2 |   vec   |
----- | ----- | ------- | 
  1   |   2   | c(1, 2) |
  2   |   0   | c(2, 0) |

如何在 R 中做到这一点?

【问题讨论】:

  • 如果你需要一个字符串元素,那么使用pastedf1$vec <- do.call(paste, c(df1, sep=", "))
  • 我希望 attr1 和 attr2 包含在解决方案中,因为每一行都包含其他“不相关”数据(不在此简化示例中)

标签: r vector dataframe attributes row


【解决方案1】:
df1 <- data.frame(attr1 = c(1,2),attr2 = c(2,0))
df1
#   attr1 attr2
# 1     1     2
# 2     2     0

df1$vec <- noquote(paste("c(",paste(df1$attr1,df1$attr2,sep=","),")",sep=""))
df1
#   attr1 attr2    vec
# 1     1     2 c(1,2)
# 2     2     0 c(2,0)

检查每一列的类

sapply(df1,class)
#      attr1     attr2       vec 
#  "numeric" "numeric" "noquote" 

注意:vec 列实际上是一个字符串,因此只需使用 noquote() 函数删除引号即可。

如果您只想将数字放在一起,仍然是字符向量,但列中没有c()

df1 <- data.frame(attr1 = c(1,2),attr2 = c(2,0))
df1
#   attr1 attr2
# 1     1     2
# 2     2     0

df1$vec <- paste(df1$attr1,df1$attr2, sep=",")
df1
#   attr1 attr2 vec
# 1     1     2 1,2
# 2     2     0 2,0

检查每一列的类

sapply(df1,class)
#     attr1       attr2         vec 
# "numeric"   "numeric" "character" 

【讨论】:

  • 抱歉没有澄清,但我不希望它们作为字符串,我希望它们作为实际向量。
猜你喜欢
  • 2021-04-03
  • 2020-07-12
  • 2020-12-01
  • 2021-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-03
  • 2016-06-01
相关资源
最近更新 更多