首页 > 解决方案 > 将值从行分配到具有相同名称的列

问题描述

我是 R 新手,但遇到以下问题:我有数据框df1

df1<-data.frame(name=c("C","C","C","B","B","A"),T=c(1,2,4,5,6,7),
                 A=c(0,2,3,2,3,0),B=c(1,0,2,0,0,5),C=c(0,0,0,2,0,1))

  name T A B C
1    C 1 0 1 0
2    C 2 2 0 0
3    C 4 3 2 0
4    B 5 2 0 2
5    B 6 3 0 0
6    A 7 0 5 1

我想T用相应的列名将值从列重新分配到列,如下所示:

  name  A B C
1    C  0 1 1
2    C  2 0 2
3    C  3 2 4
4    B  2 5 2
5    B  3 6 0
6    A  7 5 1

我努力了:

df2<-df1[outer(L$names,colnames(df1), "==")]<- df$name
df2<-df1[cbind(1:nrow(df1), match( df1$names, colnames(df1)))] <-df$name

标签: r

解决方案


您的第二种方法非常接近工作:

df2 <- df1
df2[cbind(1:nrow(df1), match(df1$name, colnames(df1)))] <- df2$T
df2$T <- NULL
df2
#   name A B C
# 1    C 0 1 1
# 2    C 2 0 2
# 3    C 3 2 4
# 4    B 2 5 2
# 5    B 3 6 0
# 6    A 7 5 1

这里给了我们需要替换df1[cbind(1:nrow(df1), match( df1$names, colnames(df1)))]的条目。df2df2$T


推荐阅读