我是R的新手并且过去使用了大量的Stackoverflow搜索来解决许多问题,但无法找到解决当前问题的方法:
我想将空数据框的列替换为包含基于匹配列名称的测量数据的另一个数据框的列。为了说明问题,这里有一些示例数据:
#sample data
set.seed (543)
input <- data.frame(replicate(6,sample(0:100,20,rep=TRUE)))
colnames(input) <- c("Time", "C2", "B1", "A1","A2", "A3") #no specific order predictable here
#create empty data frame
test <- data.frame(matrix(0, ncol = 10, nrow = nrow(input)))
colnames(test) <- c("Time", "A1", "B1", "C1","A2", "B2", "C2","A3", "B3", "C3")
我应用match
函数进行列名查找
#match column names and generate index vector
matching <- match(colnames(test),colnames(input))
#remove NA from vector
matching <- matching[!is.na(matching)]
但是当我只是使用索引向量
将测量数据帧复制到空数据帧时test[,matching] <- input[,1:ncol(input)]
无论“匹配”向量中指定的顺序如何,R都会从“从左到右”填充空的“测试”数据框。我想获得一个“测试”数据框,其中“输入”数据框中不存在的列仍然用零填充。有任何想法吗?提前致谢!
答案 0 :(得分:0)
查看你的匹配值,一切都按原样,你只需将参数反转为匹配:)
这将有效:
matching <- match(colnames(input),colnames(test))
请注意,您可以使用此功能更简单:
test[,names(input)] <- input