我有一个使用唯一数字标识符表示位置的数据集。我正在尝试将该数字转换为该位置的名称。我最初的想法是创建一个if函数来替换或创建具有该位置的新列,但是我认为这是错误的做法。下面的虚拟数据
ID df1 df2 df3
1 $500 yes open
1 $56 no close
1 $40 no pend
2 $65 yes open
3 $600 no close
6 $100 no pend
所需的输出
ID df1 df2 df3
HCA $500 yes open
HCA $56 no close
HCA $40 no pend
LMO $65 yes open
SAH $600 no close
SEM $100 no pend
或
Loc ID df1 df2 df3
HCA 1 $500 yes open
HCA 1 $56 no close
HCA 1 $40 no pend
LMO 2 $65 yes open
SAH 3 $600 no close
SEM 6 $100 no pend
答案 0 :(得分:0)
假设您有一个将merge
映射到ID
的数据框,则应该可以在此处使用普通Loc
:
map <- data.frame(ID=c(1,2,3,6), Loc=c("HCA", "LMO", "SAH", "SEM"),
stringsAsFactors=FALSE)
result <- merge(df, map, by="ID", all=TRUE)[c("Loc", "df1", "df2", "df3")]
result
Loc df1 df2 df3
1 HCA $500 yes open
2 HCA $56 no close
3 HCA $40 no pend
4 LMO $65 yes open
5 SAH $600 no close
6 SEM $100 no pend
答案 1 :(得分:0)
我们可以仅使用“ ID”作为索引(假设它是numeric
)。
df1$ID <- c("HCA", "LMO", "SAH", "", "", "SEM")[df1$ID]
df1$ID
#[1] "HCA" "HCA" "HCA" "LMO" "SAH" "SEM"
注意:作为输入向量,第4个和第5个元素保留为空白。如果原始数据集中存在这些“ ID”,则用相应的字符串填充这些ID。
答案 2 :(得分:0)
您应该尝试:
database$ID[database$ID == 1] <- "HCA"
如果此解决方案不起作用,请告诉我。
答案 3 :(得分:0)
有一个很棒的软件包,叫做data.table
。
只需遵循我的示例:
require("data.table")
x = data.table(c(1, 2, 3), c(1000, 2000, 3000))
names = c("A", "B", "C")
set(x, i = NULL, "V1", names)
结果:
V1 V2
1:A 1000
2:B 2000
3:D 3000