【发布时间】:2019-02-27 04:58:12
【问题描述】:
我有一个如下所示的数据框:
ID Loc
1 N
2 A
3 N
4 H
5 H
我想在 Loc 列中交换 A 和 H,同时不触及值为 N 的行,这样我得到:
ID Loc
1 N
2 H
3 N
4 A
5 A
此数据帧是管道的结果,因此我正在寻找是否可以将此操作附加到管道。
【问题讨论】:
我有一个如下所示的数据框:
ID Loc
1 N
2 A
3 N
4 H
5 H
我想在 Loc 列中交换 A 和 H,同时不触及值为 N 的行,这样我得到:
ID Loc
1 N
2 H
3 N
4 A
5 A
此数据帧是管道的结果,因此我正在寻找是否可以将此操作附加到管道。
【问题讨论】:
你可以试试:
df$Loc <- chartr("AH", "HA", df$Loc)
df
ID Loc
1 1 N
2 2 H
3 3 N
4 4 A
5 5 A
【讨论】:
我们可以尝试将两个对 ifelse 的调用链接在一起,以获得基本 R 选项:
df <- data.frame(ID=c(1:5), Loc=c("N", "A", "N", "H", "H"), stringsAsFactors=FALSE)
df$Loc <- ifelse(df$Loc=="A", "H", ifelse(df$Loc=="H", "A", df$Loc))
df
ID Loc
1 1 N
2 2 H
3 3 N
4 4 A
5 5 A
【讨论】:
如果你有一个因素,你可以简单地扭转这些水平
l <- levels(df$Loc)
l[l %in% c("A", "N")] <- c("N", "A")
df
# ID Loc
# 1 1 A
# 2 2 N
# 3 3 A
# 4 4 H
# 5 5 H
数据:
df <- structure(list(ID = 1:5, Loc = structure(c(3L, 1L, 3L, 2L, 2L
), .Label = c("A", "H", "N"), class = "factor")), .Names = c("ID",
"Loc"), class = "data.frame", row.names = c(NA, -5L))
【讨论】: