小编J. *_*Doe的帖子

删除在某些列中包含所有 NA 的行

假设您有一个包含 9 列的数据框。您想删除在第 5:9 列中包含所有 NA 的案例。如果第 1:4 列中有 NA,则完全不相关。

到目前为止,我已经找到了允许您删除在任何列 5:9中具有 NAs 的行的函数,但我特别需要仅删除那些在列 5:9中具有所有NAs 的行。

我编写了自己的函数来执行此操作,但由于我有 300k+ 行,因此速度非常慢。我想知道有没有更有效的方法?这是我的代码:

remove.select.na<-function(x, cols){
  nrm<-vector("numeric")
  for (i in 1:nrow(x)){
    if (sum(is.na(x[i,cols]))<length(cols)){
      nrm<-c(nrm,i)
    }
    #Console output to track the progress
    cat('\r',paste0('Checking row ',i,' of ',nrow(x),' (', format(round(i/nrow(x)*100,2), nsmall = 2),'%).'))
    flush.console()
  }
  x<-x[nrm,]
  rm(nrm)
  return(x)
}
Run Code Online (Sandbox Code Playgroud)

其中 x 是数据框, cols 是一个向量,其中包含应检查 NA 的列的名称。

r dataframe na

6
推荐指数
3
解决办法
9902
查看次数

在为 R 包创建文档时向 LaTeX 代码添加希腊字母

我正在为 R 制作一个新包,我想在文档中包含由以下代码生成的表:

\tabular{cccc}{
sign beta \tab sign gamma \tab K \tab g \cr
+ \tab + \tab 0 \tab -1 \cr
+ \tab - \tab -2pi \tab 1 \cr
- \tab + \tab -pi \tab 1 \cr
- \tab - \tab -pi \tab -1
}
Run Code Online (Sandbox Code Playgroud)

但是,我希望将单词“beta”、“gamma”和“pi”替换为实际对应的希腊字母。我怎样才能做到这一点?我尝试了以下方法:

$\beta$
Run Code Online (Sandbox Code Playgroud)

以及以下内容:

$\\beta$
Run Code Online (Sandbox Code Playgroud)

但它不起作用。任何帮助将不胜感激!

latex r

5
推荐指数
1
解决办法
511
查看次数

在 R 中从 SPSS 文件中提取标签

我使用 Haven 包将 SPSS 文件导入到 R 中。正如您在下图中看到的,所有变量都有与其关联的标签(例如“2016 年行政年份”):

标签

我正在尝试读取这些标签,但是使用这行代码会返回 NULL:

attr(X36799_0001_Data[,15], "label")
Run Code Online (Sandbox Code Playgroud)

ant 这行代码也返回 NULL:

attributes(X36799_0001_Data)$variable.labels
Run Code Online (Sandbox Code Playgroud)

任何有关我做错了什么的信息将不胜感激。谢谢你!

database label r

5
推荐指数
1
解决办法
1961
查看次数

如何引用 ggplot 中的管道对象?

我正在尝试这段代码:

iris %>% 
    mutate(Sepal.Length = Sepal.Length*100) %>% 
    ggplot(aes(x = Sepal.Length, y = Sepal.Width, fill = Sepal.Length))+
    geom_col()+
    scale_fill_gradient2(low = "yellow", high = "green", mid = "red", midpoint = median(.$Sepal.Length))
Run Code Online (Sandbox Code Playgroud)

这个问题的重点是在部分midpoint。当我运行这个时,我收到错误:

Error in median(.$Sepal.Length) : object '.' not found
Run Code Online (Sandbox Code Playgroud)

我也尝试过:

iris %>% 
    mutate(Sepal.Length = Sepal.Length*100) %>% 
    ggplot(aes(x = Sepal.Length, y = Sepal.Width, fill = Sepal.Length))+
    geom_col()+
    scale_fill_gradient2(low = "yellow", high = "green", mid = "red", midpoint = median(Sepal.Length))
Run Code Online (Sandbox Code Playgroud)

我遇到了类似的错误:

Error in median(Sepal.Length) : object 'Sepal.Length' not found
Run Code Online (Sandbox Code Playgroud)

实现我正在尝试的目标的正确方法是什么?

r ggplot2

5
推荐指数
1
解决办法
159
查看次数

R - 类似重复的函数,删除所有重复的实例

假设我们有以下内容:

c("A", "A", "B") %>% 
   cbind(1:3) %>% 
   data.frame() -> testdf
Run Code Online (Sandbox Code Playgroud)

我们想从数据框中删除第一个变量中存在重复项的所有实例。通常我们会使用这样的东西:

testdf2 <- testdf[!duplicated(testdf$.),]
Run Code Online (Sandbox Code Playgroud)

但是,testdf2看起来像这样:

. V2
A  1
B  3
Run Code Online (Sandbox Code Playgroud)

这不是我要找的 - 因为值 A 重复了,所以我想删除第一个变量中有 A 的所有情况。我希望我的输出是这样的:

. V2
B  3
Run Code Online (Sandbox Code Playgroud)

有没有可以产生这个的功能?

r

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

R - 计算两个椭圆之间的重叠

首先,是的,之前也有人问过类似的问题。然而,它们都源于PCA或一些专门的包;从这些人在问题中提供的数据中可以看出,这些数据与我拥有的情况不符,我无法使用它。

我有一个数据集,其中包含质心、长轴和短轴以及椭圆的角度。这是一个非常小的例子:

data <- data.frame(x0 = c(0, 0), y0 = c(0, 0), a = c(5, 3), b = c(10, 20), angle = c(45, 35), Ellipse = c("Ell1", "Ell2"))
Run Code Online (Sandbox Code Playgroud)

数据框:

  x0 y0 a  b angle Ellipse
1  0  0 5 10    45    Ell1
2  0  0 3 20    35    Ell2
Run Code Online (Sandbox Code Playgroud)

我还以视觉方式显示它,只是为了教学目的(我不需要绘制重叠区域):

library(ggplot2)
library(ggforce)

ggplot(data, aes(x0 = x0, 
                 y0 = y0,
                 a = a, 
                 b = b, 
                 angle = angle, 
                 color = Ellipse)) + 
  geom_ellipse()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

鉴于此设置,我如何计算重叠面积?

r graph

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

如何仅用图例绘制空的ggplot?

我的问题与这个问题非常相似,但不一样。

我正在寻找一种方法来创建一个只有图例的空 ggplot。然而,相比于我在上面链接的问题的autohor,其实我需要创建只是传说没有绘图区包含在影像中。

我尝试了以下代码:

ggplot(NULL, aes(color = ""))+
    geom_blank()+
    scale_color_manual(values = "black", labels = "Something")+
    guides(color = guide_legend())+
    theme(legend.box.background = element_rect(color = "black"))
Run Code Online (Sandbox Code Playgroud)

但是我得到了与我想要的相反的结果-我得到了一个没有图例的空白绘图区域,如下所示:

在此处输入图片说明

我希望我的最终结果看起来像这样(我在 Paint 中画了这个):

在此处输入图片说明

任何帮助,将不胜感激!

r ggplot2

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

ggplot2 - 设置中断,无论 y 轴的范围如何

我想在 y 轴上设置中断,以便它们每 10 个单位出现一次。通常你会使用类似的东西:

p+
  scale_y_continuous(breaks = seq(0, 100, 10))
Run Code Online (Sandbox Code Playgroud)

但是,如果我使用每天更新的数据集并且 y 轴的最大级别经常变化怎么办?我想找到一种解决方法,以便无论比例的最大值是多少,每 10 个单位就会出现一次中断。我想避免每隔几天就必须将函数100内部更改seq为其他数字。

r ggplot2

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

R - 生成字母和数字的序列

我正在尝试在 R 中创建以下向量:

A1 B1 C1 D1 E1 A2 B2 C2 D2 E2 A3 B3 C3 D3 E3
Run Code Online (Sandbox Code Playgroud)

我正在使用以下代码:

paste0(rep(c("A", "B", "C", "D", "E"), 3), rep(1:3, 3))
Run Code Online (Sandbox Code Playgroud)

但我得到的是以下序列:

"A1" "B2" "C3" "D1" "E2" "A3" "B1" "C2" "D3" "E1" "A2" "B3" "C1" "D2" "E3"
Run Code Online (Sandbox Code Playgroud)

所以问题是,它1:3也开始循环,而我想首先完成A-E后缀 1 的循环,然后启动A-E后缀 2 的下一个循环。

如何生成我需要的向量?

r

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

标签 统计

r ×9

ggplot2 ×3

database ×1

dataframe ×1

graph ×1

label ×1

latex ×1

na ×1