小编Vin*_*ent的帖子

R:为什么在分组时丢失课程日期

这是一个简单的例子.我有一个数据框,里面有三个日期:

Data <- as.data.frame(as.Date(c('1970/01/01', '1970/01/02', '1970/01/03')))
names(Data) <- "date"
Run Code Online (Sandbox Code Playgroud)

现在我添加一个由相同条目组成的列:

for(i in 1:3){
  Data[i, "date2"] <- Data[i, "date"]
}
Run Code Online (Sandbox Code Playgroud)

输出如下:

        date date2
1 1970-01-01     0
2 1970-01-02     1
3 1970-01-03     2
Run Code Online (Sandbox Code Playgroud)

由于未知原因,列date2的类是数字而不是日期,它是日期类.奇怪的是,如果你明确告诉R使用日期格式:

for(i in 1:3){
  Data[i, "date3"] <- as.Date(Data[i, "date"])
}
Run Code Online (Sandbox Code Playgroud)

它没有任何区别.

        date date2 date3
1 1970-01-01     0     0
2 1970-01-02     1     1
3 1970-01-03     2     2
Run Code Online (Sandbox Code Playgroud)

问题似乎在于使用子集[],在更有趣的例子中,你有两列日期,并希望创建第三个日期,从另外两列中的一列中选择一个日期,具体取决于同样的因素.

当然,我们可以通过执行以下操作来回顾一切:

Data$date4 <- as.Date(Data$date2, origin = "1970-01-01")
Run Code Online (Sandbox Code Playgroud)

但我还在想:为什么?为什么会这样?为什么我的日期只能在转移到另一列时保留日期?

r

8
推荐指数
1
解决办法
722
查看次数

将其他数据集中的点添加到ggplot2

关于这个主题已经有很多问题了,但我找不到能够回答我这个问题的问题.

我有一个barplot(见testplot1testplot3以下)绘制的数据集(bardata下图),并希望百分点另一个数据集添加到它(pointdata).请参阅简化示例:

bardata <- data.frame(
               xname = c(1, 1, 1, 2, 2, 2, 3, 3, 3), 
               yvalue = c(1, 2, 3, 2, 3, 1, 4, 2, 1), 
               colorname = c("a", "b", "c", "a", "b", "c", "a", "b", "c")
               )  
pointdata <- data.frame(
                xname = c(1, 1, 3), 
                ypos = c(2, 4, 3), 
                ptyname = c("p", "q", "r")
             ) 

testplot1 <- qplot(xname, yvalue, data= bardata, stat = "identity", 
               fill= factor(colorname),  geom …
Run Code Online (Sandbox Code Playgroud)

r ggplot2

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

SAS:隐藏的保留语句在set语句中?

请考虑以下示例:

/* Create two not too interesting datasets: */
Data ones (keep = A);
Do i = 1 to 3;
A = 1;
output;
End;
run;

Data numbers;
Do B = 1 to 5;
output;
End;
Run;

/* The interesting step: */
Data together;
Set ones numbers;
if B = 2 then A = 2;
run;
Run Code Online (Sandbox Code Playgroud)

因此,数据集包含一个带有3个观测值的变量A,所有数据集和数据集编号包含一个带有5个观测值的变量(B):数字1到5.我希望结果数据集一起有两列(A和B)和A要读取的列(垂直)1,1,1,.... ,2 ,. ,.,.

但是,在执行代码时,我发现列A读取1,1,1,.... ,2,2,2,2

显然,在第五次观察中创建的2被完全保留下来,没有明显的原因.这里发生了什么?

(为了完整起见:当我将最后一个数据步骤拆分为两个时,如下所示:

Data together;
set ones numbers;
run;
Data together;
set together;
if B = 2 then A …
Run Code Online (Sandbox Code Playgroud)

sas

6
推荐指数
1
解决办法
328
查看次数

函数内部的ggplot:什么时候不识别参数,什么时候识别它?

考虑以下两个功能:

library(ggplot2)

testdata <- as.data.frame(cbind(rep(c(1, 4), each = 50), rbinom(100, 50, .5)))
names(testdata) <- c("group", "value")

plotfun1 <- function(color) {
  ggplot(data = testdata, aes(x = factor(group, levels = c(0: 4)), y = value)) + 
    geom_boxplot(color = color) 
}

plotfun2 <- function(number) {
  ggplot(data = testdata, aes(x = factor(group, levels = c(0: number)), y = value)) + 
    geom_boxplot(color = 'red') 
}
Run Code Online (Sandbox Code Playgroud)

Plotfun1完美地工作,打电话

plotfun1('red') 
Run Code Online (Sandbox Code Playgroud)

产生两个漂亮的红色箱形图.但是打电话

plotfun2(4)
Run Code Online (Sandbox Code Playgroud)

产生错误消息:

因子中的错误(组,级别= c(0:数字)):找不到对象'数字'

显然在某些情况下ggplot无法"找到"函数的参数,在某些情况下它是.这里发生了什么?

PS我知道有一个简单的解决方法:

plotfun3 <- function(number) {
  plotdata <- testdata
  plotdata$group <- factor(plotdata$group, levels …
Run Code Online (Sandbox Code Playgroud)

r ggplot2

4
推荐指数
1
解决办法
5521
查看次数

SAS:为什么没有'注意:变量是单元化的'当未初始化的变量是数组的一部分时?

承认,这个问题不是很有趣,但是由于sas-log中的警告可能非常有用,有时候我想知道这里发生了什么.

考虑以下最小的例子.在第0步中,我们创建了一个数据集.在步骤1中,我们想要将步骤0中某个变量的值复制到step1,但是我们忘记了变量的正确名称(或者我们没记错,但是当我们离开时有人更改了它.)我写了两个版本的step1,命名为step1a和step1b .

Data step0; 
Dog = 1;
run;

Data step1a;
value = cat; 
run;

Data step1b; 
array animals cat;
value = animals[1];
run;
Run Code Online (Sandbox Code Playgroud)

不用说,step1的两个版本都生成相同的数据集,在这种情况下是一个带有变量'value'和'cat'的空数据集.

但是:当编写step1a的方式运行step1时,SASlog会警告我们出错了:

NOTE: Variable cat is uninitialized.
Run Code Online (Sandbox Code Playgroud)

我们可以回到我们的代码,注意我们认为猫是一直是一只狗,看到我们的方式的错误,并产生我们想到的正确的数据集.

另一方面,当编写step1b的方式运行step1时,SASlog将表现得好像一切都很好,我们可以在街上唱歌跳舞,只是为了发现多年后狗的价值永远消失.

所以问题是:为什么SAS在第二种情况下认为不需要警告?

arrays initialization sas

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

为什么子集不介意丢失数据帧的子集参数?

通常我想知道神秘错误来自哪里,但现在我的问题是神秘的错误来自何处.

numbers <- c(1, 2, 3)
frame <- as.data.frame(numbers)
Run Code Online (Sandbox Code Playgroud)

如果我输入

subset(numbers, )
Run Code Online (Sandbox Code Playgroud)

(所以我想拿一些子集但忘记指定子集函数的subset-argument)然后R提醒我(应该这样):

subset.default(numbers,)出错:
缺少参数"subset",没有默认值

但是当我打字的时候

subset(frame,)
Run Code Online (Sandbox Code Playgroud)

(所以用一个data.frame而不是向量的东西),它不会给出错误,而只是返回(完整)数据帧.

这里发生了什么?为什么我得不到我应得的错误信息?

r subset dataframe

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

as.integer(8952) = 8951?

我不小心发现了R base 中的as.integerdet函数的一个奇怪的错误。有谁知道这里发生了什么以及如何防止它?

我正在计算以下 3×3 矩阵的行列式:

mat <- matrix(c(15, 6, 116, 10, 13, 16, 14, 23, 56), ncol = 3)
Run Code Online (Sandbox Code Playgroud)

看起来像这样:

     [,1] [,2] [,3]
[1,]   15   10   14
[2,]    6   13   23
[3,]  116   16   56
Run Code Online (Sandbox Code Playgroud)

两件事很容易看出:所有条目都是整数,并且六组三个条目中的每一个都包含至少一个偶数. 因此行列式必须是偶数。

通过键入det(mat)它来询问 R 这个行列式的实际值,它返回一个看起来像偶数的东西:8952。但是瞧瞧:在 R 的内心深处,它实际上是一个非整数或奇数整数,因为在键入时as.integer(det(mat))我们会得到8951.

这里发生了什么?8951显然是错误的。此外,不太明显的是,值 8952 是正确的,如用笔和纸所见。

所以我的问题是:

  1. 这里发生了什么?

  2. 当被要求计算整数矩阵的行列式时,如何强制 R 给我正确的整数值?

integer r determinants

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

knitr:新版本中fig.height必须是数字吗?

我下载了新版本的 knitr 包,当尝试在 Rnw 文件中包含绘图时突然出现以下错误:

Error in options[[sprintf("fig.%s", i)]] * options$dpi : 
  non-numeric argument to binary operator
Calls: knit ... process_group.block -> call_block -> fix_options -> %n%
Run Code Online (Sandbox Code Playgroud)

经过大量实验后,我发现问题出在命令 Fig.height 上,显然它应该是数字。此代码产生错误:

\documentclass{article}

\begin{document}

<<cat, fig.cap="dog", fig.height='\\textheight'>>=
plot(c(1, 2, 3), c(2, 1, 3))
@

\end{document}
Run Code Online (Sandbox Code Playgroud)

这段代码没有:

\documentclass{article}

\begin{document}

<<cat, fig.cap="dog", fig.height=6>>=
plot(c(1, 2, 3), c(2, 1, 3))
@

\end{document}
Run Code Online (Sandbox Code Playgroud)

不幸的是我不知道这个 6 的测量单位是什么。

这段代码:

\documentclass{article}

\begin{document}

<<cat, fig.cap="dog", fig.height=6cm>>=
plot(c(1, 2, 3), c(2, 1, 3))
@

\end{document}    
Run Code Online (Sandbox Code Playgroud)

产生不同的错误:

Error in base::parse(text = code, …
Run Code Online (Sandbox Code Playgroud)

latex knitr rnw

0
推荐指数
1
解决办法
704
查看次数

标签 统计

r ×5

ggplot2 ×2

sas ×2

arrays ×1

dataframe ×1

determinants ×1

initialization ×1

integer ×1

knitr ×1

latex ×1

rnw ×1

subset ×1