在R中按列替换值

时间:2016-11-04 16:02:07

标签: r replace

我的数据框如下所示......

V1 | V2 | V3 | V4
1  | NA | 2  | 5
NA | 2  | NA | NA
1  | 1  | 1  | 1

我想将数据帧转换为以下内容而没有标题...

V1 | NA | V3 | V4
V2 | NA | NA | NA
V1 | V2 | V3 | V4

换句话说,我希望每个单元格中的标题名称都是一个列号。

数据

dd <- read.table(header = TRUE, strip.white = TRUE, sep = '|',
                 text = "V1 | V2 | V3 | V4
                 1  | NA | 2  | 5
                 NA | 2  | NA | NA
                 1  | 1  | 1  | 1")

1 个答案:

答案 0 :(得分:1)

您的预期输出对我来说似乎很奇怪,但如果我理解得很好,您想用列名替换每个非NA吗?

你可以这样做:

df[!is.na(df)] <- rep(names(df), each=nrow(df))[!is.na(df)]

给出这些数据:

df=data.frame(V1=c(1, NA, 1), V2=c(NA, 2, 1), V3=c(2, NA, 1), V4=c(5, NA, 1))

关于你希望摆脱标题,这在data.frame中是不可能的。您可以将其转换为字符矩阵,并在需要时删除dimnames属性...

df2 = as.matrix(df); attributes(df2)$dimnames<-NULL