我在数据框中有一个变量,其中一个字段通常有7-8个值.我想在数据框中的一个新变量中将它们拼写为3或4个新类别.什么是最好的方法?
如果我在类似SQL的工具中但是不确定如何在R中攻击它,我将使用CASE语句.
您将提供的任何帮助将不胜感激!
我有一个大型的data.frame字符数据,我想根据其他语言中通常称为字典的内容进行转换.
目前我正在这样做:
foo <- data.frame(snp1 = c("AA", "AG", "AA", "AA"), snp2 = c("AA", "AT", "AG", "AA"), snp3 = c(NA, "GG", "GG", "GC"), stringsAsFactors=FALSE)
foo <- replace(foo, foo == "AA", "0101")
foo <- replace(foo, foo == "AC", "0102")
foo <- replace(foo, foo == "AG", "0103")
Run Code Online (Sandbox Code Playgroud)
这样可以正常工作,但是replace每次我想要替换data.frame中的一个项目时,重复该语句显然不是很漂亮并且看起来很愚蠢.
有没有更好的方法来实现这一点,因为我有一个大约25个键/值对的字典?
我想基于另一列中的4个值创建一个新列.
if col1=1 then col2= G;
if col1=2 then col2=H;
if col1=3 then col2=J;
if col1=4 then col2=K.
Run Code Online (Sandbox Code Playgroud)
我怎么做R?我需要有人帮忙解决这个问题.我试过if/else和ifelse,但似乎没有工作.谢谢
每当我必须重新编码一组变量时,我都会考虑SPSS重新编码功能.我必须承认这很简单.包中有一个类似的recode功能car,它可以解决这个问题,但我们假设我希望完成任务factor.
我有data.frame几个变量值,范围从1到7.我想"反转"变量值,因此用7s替换1s,用6s替换2s,用5s替换3s等.我可以使用factor函数:
# create dummy factor
set.seed(100)
x <- as.factor(round(runif(100,1,7)))
y <- factor(x, levels = rev(levels(x)))
Run Code Online (Sandbox Code Playgroud)
如果我跑:
> levels(x)
[1] "1" "2" "3" "4" "5" "6" "7"
> levels(y)
[1] "7" "6" "5" "4" "3" "2" "1"
Run Code Online (Sandbox Code Playgroud)
当我想重新编码没有相同级别的因子时,问题就开始了.如果某个因子z有水平c("1", "3", "4", "6", "7"),是否有可能通过利用factor函数来"反转"水平,所以1 = 7,2 = 6,3 = 5等?
其他有效的重新编码功能就足够了!
我正试图recode在R(从car包中)使用它并没有工作.我将.csv文件中的数据读入一个名为的数据框results.然后,我Built_year根据以下逻辑替换列中的值.
recode(results$Built_year,
"2 ='1950s';3='1960s';4='1970s';5='1980s';6='1990s';7='2000 or later'")
Run Code Online (Sandbox Code Playgroud)
当我results$Built_year在执行此步骤后检查时,它似乎已经起作用.但是,它不存储此值,并返回其先前的值.我不明白为什么.
谢谢.
(目前出现问题,我看不到任何格式化的图标)
> library(car)
> df = data.frame(value=c('A', 'B', 'C', 'A'))
> foo = recode(df$value, "'A'=1; 'B'=2; 'C'=3;", as.numeric.result=TRUE)
> mean(foo)
[1] NA
Warning message:
In mean.default(foo) : argument is not numeric or logical: returning NA
> foo
[1] 1 2 3 1
Levels: 1 2 3
Run Code Online (Sandbox Code Playgroud)
啊.我认为as.numeric.result(默认为TRUE)的定义是,如果结果都是数字,它们将被强制转换为数字.
如何将此重新编码的结果设为数字?