R:从一个因子的级别中提取数字(其中的级别包含字符和数字)
问题描述:
我有一个数据集,在一列中包含了ppts的年龄(选项:17-22)。如果一个ppt大于22,那么它们的值为8,在下一列中,他们将根据他们的年龄输入评论。R:从一个因子的级别中提取数字(其中的级别包含字符和数字)
我试图写一个for循环与if语句:
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是一个因素($年龄为数字),而级别包含数字和字符,我很难理解如何做到这一点。
任何帮助将不胜感激!谢谢!
答
这应该让你关闭。
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"
说:“匹配所有的非数字字符”。我们用只留下数字的空白替换这些。
答
下面是使用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
+1
谢谢你akrun!这工作得很好:) – Robyn
选项这有什么与因素。你如何从''我一般25岁''提取数字?回答并将其用于您的应用程序。 –