有人可以解释为什么levels()显示三个因子级别,而你可以看到该向量只有两个?
> str(walk.df)
'data.frame': 10 obs. of 4 variables:
$ walker : Factor w/ 3 levels "1","2","3": 1 1 1 1 1 2 2 2 2 2
> walk.df$walker
[1] 1 1 1 1 1 2 2 2 2 2
Levels: 1 2 3
Run Code Online (Sandbox Code Playgroud)
我想提取一个关卡矢量,我认为这是正确的方法,但正如你所看到的,那里有三个偷偷摸摸的东西弄乱了我的功能.
> as.numeric(levels(walk.df$walker))
[1] 1 2 3
Run Code Online (Sandbox Code Playgroud) 我正在使用大型数据框而不是将操作写入内存,我一直在努力做与管道一样多的操作.在尝试在中间步骤中检查我的因子水平时,我遇到了使用该levels功能的问题,并想知道是否有人可能知道问题是什么.
一个例子:
library(dplyr)
Data <- data.frame(x = rep(LETTERS[1:5],3),
y = sample(1:10,length(x), replace=T))
Run Code Online (Sandbox Code Playgroud)
通常的方式有效:
levels(Data$x)
[1] "A" "B" "C" "D" "E"
Run Code Online (Sandbox Code Playgroud)
它主要用于我使用sapply:
Data %>% select(x) %>% sapply(levels)
x
[1,] "A"
[2,] "B"
[3,] "C"
[4,] "D"
[5,] "E"
Run Code Online (Sandbox Code Playgroud)
但管道不起作用并返回NULL:
Data %>% select(x) %>% levels()
NULL
Run Code Online (Sandbox Code Playgroud)
为什么要Data %>% select(x) %>% levels()回来NULL?
有没有办法使用管道数据的水平?
我希望这是一个简单的解决方案.每当我运行level(df)时,我都会给出一个NULL输出.这不是我的数据框特有的,因为它与我使用的任何数据集一起出现.我想我的一个包可能有问题.有没有人碰到这个或知道修复?谢谢
我想这要么是微软的某个计划,要么是美国范围内的计划。不过我不知道300、400等是什么意思。有人可以解释一下吗?这些数字是什么意思?是 MS 的事情还是更广泛的使用?
我正在使用CodeIgniter的Rest Server(https://github.com/philsturgeon/codeigniter-restserver)扩展,我正在努力寻找如何在方法中设置授权级别的示例.
我已经尝试了以下所有方法:
public function index_get()
{
$this->methods['index']['level'] = 10;
$this->methods['level'] = 10;
$this->rest->level = 10;
$this->level = 10;
}
Run Code Online (Sandbox Code Playgroud)
没有运气.举例赞赏.谢谢!
我使用Hmisc来标记因子名称和变量名称,这非常方便.但我发现这里的问题是代码
a <- c(1,0,1,0,1,0,1,0,1,0)
b <- c("a","b","a","b","a","b","a","b","a","b")
df.new <- data.frame(a,b)
library(Hmisc)
df.new.1 <- upData(df.new,lowernames=TRUE,a=factor(a,labels=c("No","Yes")),b=factor(b,labels=c("No","Yes")))
Run Code Online (Sandbox Code Playgroud)
对于字符向量,给出以下编码和标签
str(df.new.1$b)
Factor w/ 2 levels "No","Yes": 1 2 1 2 1 2 1 2 1 2
Run Code Online (Sandbox Code Playgroud)
,这很好.
当您在第一种情况下使用str查找编码和标签时,它会给出
str(df.new.1$a)
Factor w/ 2 levels "No","Yes": 2 1 2 1 2 1 2 1 2 1 ,
Run Code Online (Sandbox Code Playgroud)
这很奇怪!原始0 1编码消失了.我该如何解决这个问题?我想保留原来的0 1变量,以便以后进行回归.谢谢
我在以下数据框中有两列,每列根据特定顺序具有级别:
head(x1)
soa congruency
1 200 9
2 102 2
3 68 1
4 68 9
5 34 9
6 68 9
head(levels(x1$soa))
[1] "34" "68" "102" "200"
head(levels(x1$congruency))
[1] "1" "2" "9
Run Code Online (Sandbox Code Playgroud)
我希望能够粘贴两列,以便新变量的级别为:
"34_1""34_2""34_9""68_1""68_2""68_9"等......
但是,如果我执行以下操作:
x2 <- paste(x1$soa, x1$congruency, sep = "_")
Run Code Online (Sandbox Code Playgroud)
我得到的水平是:
x2 <- factor(x2)
class(x2)
[1] "factor"
levels(x2)
[1] "102_1" "102_2" "102_9" "200_1" "200_2" "200_9" "34_1" "34_2" "34_9"
[10] "68_1" "68_2" "68_9"
Run Code Online (Sandbox Code Playgroud)
我知道在粘贴列后我可以更改级别的顺序.但是我希望能够对列进行排序,以便在粘贴它之后,我不需要更改级别的顺序.有没有办法可以做到这一点?例如,我尝试使用order()函数命令x1(我正确地做了),然后粘贴两列,但我仍然得到相同的级别顺序,这不是我想要的顺序.
任何帮助将不胜感激,
阿亚拉
我有2个因素A和B:因子A具有以下水平:
> levels (A)
[1] "1" "2" "3"
Run Code Online (Sandbox Code Playgroud)
B因子有以下几个级别:
> levels (B)
[1] "1" "2"
Run Code Online (Sandbox Code Playgroud)
我想计算它们的水平重合的元素的比例,所以我使用以下内容:
C<-mean (A == B)
Run Code Online (Sandbox Code Playgroud)
因为它们必须具有相同的水平.我在B中添加了"3"级别:
levels(B) <- c(levels(B), "3")
Run Code Online (Sandbox Code Playgroud)
然而,这仅仅是一个例子,因为有时A的级别比B级更高,有时B的级别比A级更高.我想向每个级别插入最大级别的数量,这样它们就会相同而且我将能够计算C.我该怎么办?
这是我所面对的一个简单例子.我有我的因子水平,B-1, B-2, B-9, B-10, B-11并希望按照给定的顺序排列它们.在这里,我可以轻松地重新排列级别,但是,在我的数据中,我确实有复杂的结构,并希望通过一些编码来完成.我想知道如何按逻辑顺序排列这些因子水平.
set.seed(12345)
f <- rep(c("B-1", "B-2", "B-9", "B-10", "B-11"), each=3)
Y <- runif(n=15, min=100, max=1000)
df <- data.frame(f, Y)
levels(df$f)
[1] "B-1" "B-10" "B-11" "B-2" "B-9"
library(gtools)
mixedsort(df$f)
[1] B-1 B-1 B-1 B-10 B-10 B-10 B-11 B-11 B-11 B-2 B-2 B-2 B-9 B-9 B-9
Levels: B-1 B-10 B-11 B-2 B-9
df2 <- df[mixedorder(df$f), ]
df3 <- within(df,
Position <- factor(f,
levels=names(sort(table(f),
decreasing=TRUE))))
levels(df3$Position)
[1] "B-1" "B-10" "B-11" "B-2" "B-9"
Run Code Online (Sandbox Code Playgroud)
我试图减少数据中每个因子变量的级别数.我想减少执行2次操作的级别数:
我写了一个工作正常的函数,但我不喜欢这些代码.如果REMAIN级别没有足够的观察结果也没关系.我更喜欢dplyr方法.
ReplaceFactor <- function(data, max_levels, min_values_factor){
# First make sure that not to many levels are in a factor
for(i in colnames(data)){
if(class(data[[i]]) == "factor"){
if(length(levels(data[[i]])) > max_levels){
levels_keep <- names(sort(table(data[[i]]), decreasing = T))[1 : (max_levels - 1)]
data[!get(i) %in% levels_keep, (i) := "REMAIN"]
data[[i]] <- as.factor(as.character(data[[i]]))
}
}
}
# Now make sure that in each level has enough observations
for(i in colnames(data)){
if(class(data[[i]]) == "factor"){
if(min(table(data[[i]])) < min_values_factor){
levels_replace <- table(data[[i]])[table(data[[i]]) < min_values_factor]
data[get(i) %in% …Run Code Online (Sandbox Code Playgroud)