2017-02-25 66 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

相關問題