我正在阅读Hadley Wickham关于强制的高级R部分,我无法理解这种比较的结果:
"one" < 2
# [1] FALSE
Run Code Online (Sandbox Code Playgroud)
我假设R将2强制转换为一个字符,但我不明白为什么R返回FALSE而不是返回错误.这对我来说尤其令人费解
-1 < "one"
# TRUE
Run Code Online (Sandbox Code Playgroud)
所以我的问题有两个方面:首先,为什么这个答案,第二,有没有办法看到R如何在这些例子中转换逻辑向量中的各个元素?
我确定以前曾经问过,但我不知道要搜索什么,所以我提前道歉.
假设我有以下数据框:
grades <- data.frame(a = 1:40, b = sample(45:100, 40))
Run Code Online (Sandbox Code Playgroud)
使用deplyr,我想创建一个新变量,根据以下标准指示学生收到的成绩:90-100 =优秀,80-90 =非常好等.
我以为我可以使用以下内容来获取mutate()内嵌套ifelse()的结果:
grades %>%
mutate(ifelse(b >= 90, "excellent"),
ifelse(b >= 80 & b < 90, "very_good"),
ifelse(b >= 70 & b < 80, "fair"),
ifelse(b >= 60 & b < 70, "poor", "fail"))
Run Code Online (Sandbox Code Playgroud)
这不起作用,因为我收到错误消息"参数no缺失,没有默认值").我认为"不"将是最后的"失败",但显然我的语法错了.
如果我先单独过滤原始数据,然后调用ifelse,我可以得到这个,如下所示:
a <- grades %>%
filter( b >= 90) %>%
mutate(final = ifelse(b >= 90, "excellent"))
Run Code Online (Sandbox Code Playgroud)
和rbind a,b,c等等.显然,这不是我想要的方式,但我想理解ifelse()的语法.我猜测后者是有效的,因为没有任何值不符合标准,但是当有多个ifelse时,我仍然无法弄清楚如何让它工作.
我一直在努力解决这个问题,并且我想在这里问一下.
假设我有一个如下数据框:
df <- data.frame(participant = 1:6, group = c("adult", "adult", "child", "child", "NSS", "NSS"), RegProto = c(2, 3, 4, 2, 4, 3), RegInt = c(2, 3, 4, 6, 6, 5), RegDistant = c(3, 3, 4, 5, 4, 5), IrregProto = c(4, 5, 3, 4, 3, 1), IrregInt = c(4, 4, 4, 4, 4, 4), IrregDistant = c(4, 5, 6, 8, 9, 1))
Run Code Online (Sandbox Code Playgroud)
与此数据帧中的问题是,每个包含两个变量:一个变量,其值不是Reg或Irreg,另一种其值是Proto,Int,或Distant.我想要做的是拆分这些列并使表长,最好使用tidyr.我以为我可以这样做.
library("tidyr")
df_long <- df …Run Code Online (Sandbox Code Playgroud) 我正在学习如何使用 R 来解析 XML,并且我正在尝试使用 Hadley 的 Wickhamxml2包来解析位于此处的TEI XML 文本文档(警告:这是一个压缩文件,我正在尝试解析的特定文件)在下面的代码中给出)。我试图了解命名空间在这个包中的工作原理(我无法理解我正在使用的特定文本的文档)。有了这个XML包,我可以执行以下操作:
library("XML")
crisis <- xmlParse("data/Crisis130_22.2.tei.xml")
all_divs <- getNodeSet(crisis, "//def:div",
namespaces=c(def = "http://www.tei-c.org/ns/1.0"))
Run Code Online (Sandbox Code Playgroud)
但是,我不知道如何做到这一点xml2。我要么收到inherits(x, "xml_document") is not TRUE错误,要么收到In node_find_all(x$node, x$doc, xpath = xpath, nsMap = ns) :
Undefined namespace prefix [1219]错误。这是我尝试过的:
library("xml2")
crisis2 <- read_xml("data/Crisis130_22.2.tei.xml")
# check to see whether TEI URL is present
xml_ns(crisis2)
all_divs2 <- xml_find_all(crisis2, "//div", xml_ns(crisis2)) # gives empty list
all_divs <- xml_find_all(crisis2, "/def:div", xml_ns(crisis2)) # undefined …Run Code Online (Sandbox Code Playgroud) 我有一个如下所示的数据框:
df <- data.frame(
group = c(rep("A", 4),rep("B", 4), rep("C", 4)),
word = c(rep(c("first", "first", "second", "second"), 3)),
emphasis = c(rep(c("normal", "emphatic"), 6)),
percentage = c(.175, .07, .13, .04, .60, .43, .21, .28, .63, .63, .40, .29))
Run Code Online (Sandbox Code Playgroud)
我想创建一个看起来非常像这样的折线图:
library(ggplot2)
p <- ggplot(df, aes(x = group, y = percentage, group = emphasis, col = emphasis))
p + geom_line() + facet_wrap(~ word)+ scale_y_continuous(label = percent) + geom_point(size=4, shape=21, colour="black")
Run Code Online (Sandbox Code Playgroud)
我无法弄清楚如何将y比例提高到100%,因为我没有达到那么高的数据点.我认为scale_y_continuous(limits = c(0, 100)会做到这一点,但事实并非如此.我想它一定很容易,但我找不到任何如何做的例子.
我有4951个命名元素的大量列表.这些元素中的每一个基本上都是字母(即它们是字符串字符).我想要做的是将列表中的每个元素导出为单独的文本文件,并在列表中使用与其名称对应的文件名.
我所拥有的简单版本是:
letter1 <- c("here is some text")
letter2 <- c("and here is some more text")
letter3 <- c("and this is the final one")
list <- list(letter1 = letter1, letter2 = letter2, letter3 = letter3)
Run Code Online (Sandbox Code Playgroud)
我希望得到以下内容:
letter1.txt,其内容为"here is some text"
letter2.txt,其内容为"这里是更多文本"
letter3.txt,其内容为"这是最后一个"
我想我应该使用一个循环.但是,我不知道如何超越这个:
for (i in 1:length(list)){
}
Run Code Online (Sandbox Code Playgroud)