小编tim*_*kas的帖子

默认名称连接

如果我有一个命名向量

v <- c(a = 1, b = 2)
Run Code Online (Sandbox Code Playgroud)

我添加它们

s <- v[2] + v[1]
Run Code Online (Sandbox Code Playgroud)

结果是一个长度为1的向量,其元素被命名为算术中的第一个元素,这里是"b".您可以使用双括号删除此行为.

无论如何,如果我然后尝试使用c()创建一个新的命名向量

v <- c(v, sum = s)
Run Code Online (Sandbox Code Playgroud)

sum元素的结果名称不是"sum",而是"sum.b".

这种行为是不可取的,因为我特别指出我希望这个元素被命名为sum.

如果相反,我添加这样的元素:

v["sum"] <- s
Run Code Online (Sandbox Code Playgroud)

我得到了理想的行为.

为什么R连接对象的名称和使用提供的名称c(),为什么这与使用括号中的新名称添加元素不同?这不是要问如何摆脱这种行为(我可以用双括号或者这样做unname()),但是它背后的原则是什么,以及在其他情况下我可以期待这种情况发生?

attributes r vector

7
推荐指数
1
解决办法
120
查看次数

在R中使用带有多个参数的匿名函数

我试图在数据框中生成新变量,这些变量以数据框中的两个(或更多)其他变量为条件.我相信R中的循环函数(即lapply,sapply等)对于此目的是有用且有效的.然而,根据我的方法,有些事情是不对的,我无法弄清楚是什么.

M <- data.frame(x=c("A", "A", "B", "B"), y=c(1,2,1,2))
Run Code Online (Sandbox Code Playgroud)

使用这个数据框,我想生成一个新的列z,包含如果是x == "A"和,则为TRUE的逻辑y == 1.以下代码是我能在这里得到的最好的代码,但似乎只是评估我的第一个条件.

M$z <- sapply(M$x, function(x,y) if((x == "A") && (y == 1)) T else F, M$y)
Run Code Online (Sandbox Code Playgroud)
  • 这个代码可以修复我的目的吗?
  • 有没有更好的方法在R中执行此操作,可能使用其他循环函数?

loops r anonymous-function dataframe

6
推荐指数
2
解决办法
4953
查看次数

如何在 R tidyverse 中转换列类型

我试图适应使用 Tidyverse,但数据类型转换被证明是一个障碍。我知道自动将字符串转换为因子并不理想,但有时我想使用因子,因此一些将小标题中所需字符列轻松转换为因子的方法会非常好。我更喜欢使用 readxl 包读取 excel 文件,但因素不是允许的列类型!事后我可以逐列浏览,但这确实效率不高。我希望以下两项中的任何一项都能正常工作:

  1. 读入文件并同时指定应将哪些列作为因子读取:

     data <- read_excel(path = "myfile.xlsx", 
                        col_types=c(col2="factor", col5="factor)))
    
    Run Code Online (Sandbox Code Playgroud)
  2. 或者这个功能由于很多原因会非常好,但我无法弄清楚它应该如何工作。col_types 函数让我很困惑:

     diamonds <- col_types(diamonds, 
                           cols=c(cut="factor", color="factor", clarity="factor"))
    
    Run Code Online (Sandbox Code Playgroud)

提前致谢!

r tidyverse

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

如何将两列"计数"矩阵转换为R中的二进制向量?

如何将具有两列计数矩阵的数据帧转换为R中具有单个二进制向量的数据帧?例如,我有一个这样的数据框,其中id是主题的id,s和f是该主题的"成功"和"失败"的数量,x是描述该主题的某些特征的第三个变量.

id s f x
1  0 3 A
2  2 1 A
3  1 2 B
Run Code Online (Sandbox Code Playgroud)

我希望将此数据框转换为:

id n x
1  f A
1  f A
1  f A
2  s A
2  s A
2  f A
3  s B
3  f B
3  f B
Run Code Online (Sandbox Code Playgroud)

其中列n表示每个试验是成功还是失败(f).

我确定我可以编写一个函数来做这个,但我想知道是否有预制解决方案.

r reshape

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

在R中手动创建一个绘图框

我需要在R中控制基本xy图的样式,因此构建绘图区域如下:

frame()
plot.window(xlim=c(0,1), ylim=c(-.6, .8))
axis(1, at=c(0, .2, .4, .6, .8, 1.0), lwd=2)
axis(2, at=c(-.6, -.4, -.2, 0, .2, .4, .6, .8), lwd=2)
Run Code Online (Sandbox Code Playgroud)

但是,我无法弄清楚如何在该图周围创建一个物理框架(lwd = 2).是否可以(必要?)使用line()polygon()?或者有更内置的内容吗?

我也对如何更改使用该plot()函数创建的绘图的框架和轴权重感兴趣.

plot r frame

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