R:从因子中的级别提取数字(其中级别包含字符和数字)

时间:2017-02-25 22:28:25

标签: r

我有一个ppts'年龄的数据集在一列中(选项:17-22)。如果某个ppt超过22,则它们的值为8,在下一列中,他们将输入一个与其年龄相符的评论。

For example:

我尝试用if语句编写for循环:

for(i in 1:nrows(df){
if(df$Age[i] == 8){
#extract the numerical value in $Age.comment[i] and replace
#df$Age[i] with this value
}
}

因为$ Age.comment是一个因素($ Age是数字),并且级别包含数字和字符,我很难过如何做到这一点。

任何帮助将不胜感激!!谢谢!

2 个答案:

答案 0 :(得分:1)

这应该让你接近。

df <- data.frame(Age = 1:8, Age.comment = paste(16:23, LETTERS[1:8]))
df
#   Age Age.comment
# 1   1        16 A
# 2   2        17 B
# 3   3        18 C
# 4   4        19 D
# 5   5        20 E
# 6   6        21 F
# 7   7        22 G
# 8   8        23 H

ifelse(df$Age == 8, gsub("\\D", "", df$Age.comment), df$Age)
#[1] "1"  "2"  "3"  "4"  "5"  "6"  "7"  "23"

正则表达式"\\D"表示“匹配所有非数字字符”。我们用空格替换这些只留下数字。

答案 1 :(得分:0)

以下是使用parse_number

tidyverse的选项
library(tidyverse)
library(data.table)
setDT(df)[, New := Age][Age==8, New := parse_number(Age.comment)]
df$New
#[1]  1  2  3  4  5  6  7 23