如果我有一个命名向量
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()),但是它背后的原则是什么,以及在其他情况下我可以期待这种情况发生?
我试图在数据框中生成新变量,这些变量以数据框中的两个(或更多)其他变量为条件.我相信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)
我试图适应使用 Tidyverse,但数据类型转换被证明是一个障碍。我知道自动将字符串转换为因子并不理想,但有时我想使用因子,因此一些将小标题中所需字符列轻松转换为因子的方法会非常好。我更喜欢使用 readxl 包读取 excel 文件,但因素不是允许的列类型!事后我可以逐列浏览,但这确实效率不高。我希望以下两项中的任何一项都能正常工作:
读入文件并同时指定应将哪些列作为因子读取:
data <- read_excel(path = "myfile.xlsx",
col_types=c(col2="factor", col5="factor)))
Run Code Online (Sandbox Code Playgroud)或者这个功能由于很多原因会非常好,但我无法弄清楚它应该如何工作。col_types 函数让我很困惑:
diamonds <- col_types(diamonds,
cols=c(cut="factor", color="factor", clarity="factor"))
Run Code Online (Sandbox Code Playgroud)提前致谢!
如何将具有两列计数矩阵的数据帧转换为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中控制基本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()函数创建的绘图的框架和轴权重感兴趣.