【问题标题】:How to invert characters in a Vector in R language?如何在 R 语言中反转向量中的字符?
【发布时间】:2017-07-20 08:21:25
【问题描述】:

我是初学者,正在探索 R 语言。正在处理下面的 data.frame,我想反转 Sex 向量值。即 'F' -> 'M' 和 'M' -> 'F'

sampleData
         Age Height Sex
Alex      25    177   F
Lilly     31    163   F
Mark      23    190   M
Oliver    52    179   M
Martha    76    163   F
Lucas     49    183   M
Caroline  26    164   F

我尝试了三种方法,但都没有找到正确的方法。

  1. 将 F 替换为 M,反之亦然,但不会影响 Vector 中的实际值。

    级别(性别)[1]

  2. 在下面使用“mapvalues”功能进行了尝试,但仍然没有任何变化。

    图书馆(plyr) mapvalues(sampleData$Sex, from = c("F", "M"), to = c("M", "F"))

  3. 将 Sex 转换为矩阵并应用“求解”,但了解到它只能应用于数值矩阵。

    Sex

有人可以帮我解决字符反转问题吗?!

【问题讨论】:

  • df$Sex <- chartr('FM', 'MF', df$Sex)
  • factor(df$Sex, levels = c("F","M"), labels = c("M", "F"))
  • 谢谢@Sotos 和 docendo。两者都很完美。但是,Sotos 能否请您提供有关chartr 功能工作的见解?!它非常有用。
  • 如果你去帮助页面?chartr很清楚它的作用。你基本上把旧字符串和新字符串都喂给它,然后它会切换它们

标签: r matrix dataframe vector


【解决方案1】:

您可以像这样简单地使用语句ifelse

为简单起见,我创建了一个类似的数据框:

sampleData <- data.frame(Age = c(25,31,23,15), Height = c(177,163,190,163), Sex = c("M","F","F","M"))

然后你可以使用ifelse

sampleData$Sex <- ifelse(sampleData$Sex=="F","M","F")

【讨论】:

  • @PradeepVaranasi 没问题!所以现在接受我的回答! ;-)
【解决方案2】:

你也可以写一个函数来转换它:

convertChar <- function(vec){
    if(length(unique(vec))!=2)
        stop("Vector has more or less than 2 unique values")
    newChar <- ifelse(vec == unique(vec)[1],unique(vec)[2],unique(vec)[1])
    return(newChar)
}

convertChar(c("M","M","F","F"))

【讨论】:

  • 感谢您回答我的问题。但是考虑到 LOC 和可重用性,上面的答案和 cmets 中的答案很容易。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-03
  • 2014-05-06
相关资源
最近更新 更多