得到了我无法解决的问题。 示例数据集:
company <- c("compA","compB","compC")
compA <- c(1,2,3)
compB <- c(2,3,1)
compC <- c(3,1,2)
df <- data.frame(company,compA,compB,compC)
我想创建一个新列,其中包含列中的值,该列位于&#34; company&#34;列中。同一条线。结果提取将是:
df$new <- c(1,3,2)
df
答案 0 :(得分:0)
我不确定我是否理解你的问题,从你的描述中不清楚。但似乎你要求数据值的对角线,因为这将是&#34;名称在列&#34;公司&#34;同一行&#34;。以下将执行此操作:
df$new <- diag(matrix(c(compA,compB,compC), nrow = 3, ncol = 3))
diag
函数将为您返回矩阵的对角线。所以我首先将三个原始矢量连接成一个矢量,然后将其指定为包裹成三行三列的矩阵。然后我走了对角线。然后将整个内容添加到数据框中。
这回答了你的问题吗?
答案 1 :(得分:0)
您设置的方式,每个公司都有一行一列,行和列的顺序相同。如果这是您的真实数据集,那么正如其他人所说diag(...)
是解决方案(您应该选择该答案)。
如果您的真实数据集有多个公司实例(例如,每个公司有多个行,那么这更通用:
# using your df
sapply(1:nrow(df),function(i)df[i,as.character(df$company[i])])
# [1] 1 3 2
# more complex case
set.seed(1) # for reproducible example
newdf <- data.frame(company=LETTERS[sample(1:3,10,replace=T)],
A = sample(1:3,10,replace=T),
B=sample(1:5,10,replace=T),
C=1:10)
head(newdf)
# company A B C
# 1 A 1 5 1
# 2 B 1 2 2
# 3 B 3 4 3
# 4 C 2 1 4
# 5 A 3 2 5
# 6 C 2 2 6
sapply(1:nrow(newdf),function(i)newdf[i,as.character(newdf$company[i])])
# [1] 1 2 4 4 3 6 7 2 5 3