Newbie-sh with R.
挑战:我的数据框中包含许多变量(见下文)。我需要转换" $ TIMEPT:chr"的文本。到数值并做一些数学运算。
$ SUBJ : chr "1" "2" "3" "4" ...
$ VISIT : chr "0" "12" "34" "84" ...
$ TIMEPT : chr "Within 15 minutes prior to stopping infusion" "Within 5 minutes prior to stopping infusion" "5 minutes post infusion" "15 minutes post infusion" ...
MY 2方法:
1
df$TIMEPT <-replace (df$TIMEPT, df$TIMEPT == "Within 15 minutes
prior to dosing", 0)
这种方法仅适用于我尝试过的第一组文本 将TIMEPT变量转换为因子:
2
df$TIMEPT <- within(df, TIMEPT <- df$TIMEPT <- factor(TIMEPT, labels
= c(0, 1,2,3.92,4.08, 4.25, 4.5, 5, 6, 7, 10)))
这种方法(2)创建了所有变量的嵌套表(然后df变得更大,更复杂)。使用以下表达式将这些因子转换为数字无效:
df$TIMEPT <- as.numeric(as.numeric(df$TIMEPT))
问题 - 我怎么能转换这样的&#34; long&#34;文本TIMEPT成数值?
预期结果
过度简化将是:
SUBJID VISIT TIMEPT
1 1 0 0
2 2 0 1
3 3 0 2
4 4 0 3
......
注意: $ TIMEPT中的文本在df中具有相似的数值。例如,文本指定&#34;在5分钟之前&#34;,&#34;在5分钟之前&#34;,&#34; 5分钟之后&#34; ......因此,数值解析可能不起作用(我将按照下面的建议尝试)
答案 0 :(得分:1)
试试这个
df$newvariable<-readr::parse_number(df$TIMET)
它应该只从字符串中提取数字。
示例:
c<-data.frame(x=c(1,2,3,4,5,6,7,8,9), y=c("10 mins", "20 mins", "30 mins", "40 mins", "50 mins", "60 Minutes", "70 mins", "80 mins", "90 minutes"))
c$y<-as.character(c$y)
c$t<-readr::parse_number(c$y)
c
x y t
1 1 10 mins 10
2 2 20 mins 20
3 3 30 mins 30
4 4 40 mins 40
5 5 50 mins 50
6 6 60 Minutes 60
7 7 70 mins 70
8 8 80 mins 80
9 9 90 minutes 90