2017-02-25 99 views
2

我有一个数据集,在一列中包含了ppts的年龄(选项:17-22)。如果一个ppt大于22,那么它们的值为8,在下一列中,他们将根据他们的年龄输入评论。R:从一个因子的级别中提取数字(其中的级别包含字符和数字)

For example:

我试图写一个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是一个因素($年龄为数字),而级别包含数字和字符,我很难理解如何做到这一点。

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

+0

选项这有什么与因素。你如何从''我一般25岁''提取数字?回答并将其用于您的应用程序。 –

回答

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"说:“匹配所有的非数字字符”。我们用只留下数字的空白替换这些。

0

下面是使用parse_numbertidyverse

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

相关问题