如何交换数据框同一列中的行值?

时间:2019-02-27 04:58:13

标签: r dataframe

我有一个如下数据框:

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 

此数据帧是管道的结果,因此我想看看是否有可能将此操作附加到管道。

3 个答案:

答案 0 :(得分:3)

您可以尝试:

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

答案 1 :(得分:2)

对于基本的R选项,我们可以尝试将两个对ifelse的调用链接在一起:

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

答案 2 :(得分:1)

如果有一个因素,您可以简单地反转那些水平

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))