标签: r-factor

在 R 中显示因子水平和因子值的映射

我想知道 R 中是否有任何函数可以显示因子变量的级别和值的映射?例如我期望这样的输出:

Fac_level:“是”-值:“1”

Fac_level: "no" - 值: "2"

这对于第一次处理未知数据集时非常有帮助。

r r-factor

3
推荐指数
1
解决办法
3350
查看次数

根据其他列中的查找更改因子水平的顺序

我有一个数据框,其中包含 \xe2\x80\x93 以及其他 \xe2\x80\x93\xc2\xa0 两列引用同一事物。一个是另一个的数字 ID,它被解析为一个因素。

\n\n
df = data.frame(\n  "id" =  c(5, 3, 1, 2, 4, 5),\n  "val" = factor(c("a", "b", "c", "d", "e", "a")),\n  "someColumn" = c(13, 38, 91, 83, 19)\n)\n
Run Code Online (Sandbox Code Playgroud)\n\n

由于还有其他附加列,这些因子水平中存在重复项。现在,因子水平按字母顺序排序,无论它们在数据框中出现的顺序如何。

\n\n

问题是:我想根据因子的 ID 对因子的级别进行排序。这样,使用它会变得更容易,尤其是在绘图中。我不想更改标签。我可以将级别更改为实际 ID,但我认为没有必要。

\n\n

在我发现的其他示例中,建议是这样做:

\n\n
factor(df$val, levels = df$val[order(df$id)])\n
Run Code Online (Sandbox Code Playgroud)\n\n

但是,这对我来说不起作用,因为存在重复项:

\n\n
Warning message:\nIn `levels<-`(`*tmp*`, value = if (nl == nL) as.character(labels) else paste0(labels,  :\n  duplicated levels in factors are deprecated\n
Run Code Online (Sandbox Code Playgroud)\n\n

我不想删除原始数据中的行,因为我不想丢弃数据或更改其顺序,并继续使用数据框。我可以通过其他方式消除警告和重复的级别吗?或者我应该完全使用另一种方法?

\n

r r-factor

3
推荐指数
1
解决办法
2670
查看次数

找到序数中位数的惯用法

我需要在R中找到序数(即有序因子)的中位数.

我在标准库中找不到这样做的方法,所以我提出了以下笨重的解决方案:

ordinal.median <- function(x){
        lbls <- levels(x)
        new.vars <- c(NA, 1:length(lbls))
        new.vars[1] <- median(as.numeric(x))
        return(factor(new.vars, labels=lbls, ordered=T)[1])
}
Run Code Online (Sandbox Code Playgroud)

R中的惯用解决方案是什么?

r median ordinal r-factor

2
推荐指数
1
解决办法
1272
查看次数

将矩阵从模式A转换为模式B.

非常简单的问题,我想以一般的方式问,因为它似乎是一个经常出现的问题,我很乐意找到一种通用的方法来做到这一点.例如,问题是将逻辑矩阵转换为因子矩阵,但保持矩阵结构:行数和列数,列号,rownames.我想要更直接的东西

X2 <- matrix(as.mode(X), ncol=ncol(X)); 
rownames(X2) <- rownames(X) ...
Run Code Online (Sandbox Code Playgroud)

我已经在某些情况下找到了这个问题,所以我把它放在这里,但仍有一些问题......

A. into( - >)因素是我没有一个简单的方法.

B. 1.逻辑 - >数字:使用'+0'技巧

BoolMatrix <- matrix(c(TRUE,FALSE),nrow=3,ncol=2)
rownames(BoolMatrix) <- LETTERS[1:3]; colnames(BoolMatrix) <-LETTERS[11:12]
(NumMatrix <- BoolMatrix + 0)   
Run Code Online (Sandbox Code Playgroud)

B. 2.数字 - >逻辑:直接使用条件

NumMatrix <- matrix(1:6, ncol=2)
rownames(NumMatrix) <- LETTERS[1:3]; colnames(NumMatrix) <-LETTERS[11:12]
(BoolMatrix <- NumMatrix == 0) 
Run Code Online (Sandbox Code Playgroud)

C.数字< - >字符:不能比2个衬垫更好,直接改变模式工作(也可以在逻辑和数字之间工作,但上面的解决方案更优雅)

CharMatrix <- NumMatrix
mode(CharMatrix) <-"character"
print(CharMatrix)
Run Code Online (Sandbox Code Playgroud)

最后的解决方案("2班轮")实际上适用于与因素无关的任何事情,我遇到了困难......

任何的想法 ?:-)

r matrix logical-operators r-factor

2
推荐指数
1
解决办法
979
查看次数

read.csv参数stringsAsFactors不工作?

根据文档read.csv,参数stringsAsFactors在设置时应将引用的数据值解释为因子.考虑以下数据文件,我们将调用它test.csv.

"a",b,c 
"1",2,3 
"3",2,3 
Run Code Online (Sandbox Code Playgroud)

当我尝试使用时读取此数据时read.csv,它似乎不会将第一列解析为因子.

foo = read.csv("test.csv", stringsAsFactor=T)
is.factor(foo$a)
Run Code Online (Sandbox Code Playgroud)

输出:

[1] FALSE
Run Code Online (Sandbox Code Playgroud)

我试图使用没有引号的列名,但这也不起作用.我怎么能纠正这个?

csv r file-import r-factor

2
推荐指数
1
解决办法
1371
查看次数

使用名称重新排序因子级别

我可以使用像这样的索引重新排序因子的级别

factor(iris$Species,levels(iris$Species)[c(3:1)])
Run Code Online (Sandbox Code Playgroud)

但是,如果我尝试按名称重新排序相同的因子,它不起作用:

factor(iris$Species,levels(iris$Species)[c("virginica", "versicolor", "setosa")])
Run Code Online (Sandbox Code Playgroud)

有没有办法使用他们的名字重新排序因子的级别?

r r-factor

2
推荐指数
1
解决办法
2087
查看次数

为什么`as.factor`在R中通过`apply`函数应用时不起作用?

我想知道为什么as.factor函数在通过apply函数应用时不起作用R

> df.nrow <- 10
> df <- data.frame(col1=sample(c("a","b","c"), df.nrow, TRUE),
+                  col2=sample(c("d","e","f"), df.nrow, TRUE),
+                  col3=sample(c("g","h","i"), df.nrow, TRUE))
> apply(df, 2, is.factor)
 col1  col2  col3 
FALSE FALSE FALSE 
> df <- apply(df, 2, as.factor)
> apply(df, 2, is.factor)
 col1  col2  col3 
FALSE FALSE FALSE 
Run Code Online (Sandbox Code Playgroud)

r apply r-factor

2
推荐指数
1
解决办法
1005
查看次数

比较两个相同长度但不同水平的因素

是否有可能比较R中相同长度不同水平的两个因素?

A <- factor(1:5)

str(A)
 Factor w/ 5 levels "1","2","3","4",..: 1 2 3 4 5

B <- factor(c(1:3,6,6))

str(B)
 Factor w/ 4 levels "1","2","3","6": 1 2 3 4 4
Run Code Online (Sandbox Code Playgroud)

运行这行代码

mean(A == B)
Run Code Online (Sandbox Code Playgroud)

给我以下错误:

Ops.factor(A,B)中的错误:因素的级别集是不同的

r r-factor

2
推荐指数
1
解决办法
1850
查看次数

如何将字符向量转换为数字?

我有这个字符向量,但我需要将其转换为数字。

>iono_test_y
[1] "g" "b" "b" "g" "g" "g" "b" "g" "b" "b" "g" "b" "g" "b" "b" "b" "g" "g" "b" "b" "b" "g" "g"
[24] "b" "b" "g" "g" "g" "b" "g" "g" "g" "b" "b" "b" "b" "b" "g" "g" "g" "g" "g" "b" "g" "b" "b"
[47] "g" "g" "g" "g" "g" "g" "g" "g" "g" "g" "g" "g" "g" "g" "g" "g" "g" "g" "g" "g" "g" "g" "g"
[70] "g" "g"
Run Code Online (Sandbox Code Playgroud)

我已经试过了

iono_test_y <- …
Run Code Online (Sandbox Code Playgroud)

r numeric r-factor

2
推荐指数
1
解决办法
1万
查看次数

R:为什么在将列转换为因子后,我没有得到类型或类"因子"?

我有以下设置.

df <- data.frame(aa = rnorm(1000), bb = rnorm(1000))

apply(df, 2, typeof)
#      aa       bb 
#"double" "double" 

apply(df, 2, class)
#       aa        bb 
#"numeric" "numeric" 
Run Code Online (Sandbox Code Playgroud)

然后我尝试将其中一列转换为"factor".但是正如你在下面看到的,我没有得到任何"因素"类型或类.我做错了吗?

df[, 1] <- as.factor(df[, 1])

apply(df, 2, typeof)
#         aa          bb 
#"character" "character" 

apply(df, 2, class)
#         aa          bb 
#"character" "character" 
Run Code Online (Sandbox Code Playgroud)

r apply factors dataframe r-factor

2
推荐指数
1
解决办法
80
查看次数