我有一个datwe37列的数据框.我有兴趣将第23到35列中的整数值(1,2,99)转换为字符值('是','否','NA').
datwe$COL23 <- sqldf("SELECT CASE COL23 WHEN 1 THEN 'Yes'
WHEN 2 THEN 'No'
WHEN 99 THEN 'NA'
ELSE 'Name ittt'
END as newCol
FROM datwe")$newCol
Run Code Online (Sandbox Code Playgroud)
我一直在使用上面的sqldf语句分别转换每一列.我想知道是否有其他智能方法可以做到这一点,也许应用功能?
如果您需要任何可重现的数据来构建数据帧datwe,我将在此处添加它.谢谢.
编辑:示例 datwe
set.seed(12)
data.frame(replicate(37,sample(c(1,2,99),10,rep=TRUE)))
Run Code Online (Sandbox Code Playgroud) 是否可以注释掉包含多个块(例如:4-5)的Rmd文件的一部分?常规HTML注释无效。
---
title: "Untitled"
author: "author"
date: "5 August 2017"
output: pdf_document
---
```{r}
print(123)
```
```{r}
2**2
```
<!--
# Comment section starts
This text is not visible in the output.
```{r}
a <- 3*4
a
```
This text not be visible in the output.
# Comment section ends
-->
```{r}
print(1)
```
Run Code Online (Sandbox Code Playgroud)
过去,我记得在SO帖子的某处读到它的目标是下一版knitr。
更新:我并不是要eval=FALSE在每个块中使用该解决方案,因为我也需要注释掉块之间的文本。另外,我正在寻找一种优雅的方式来做到这一点。
上面的代码输出pdf输出,如下所示:
令人惊讶的是,它有效。但是相同的HTML注释(<!-- -->)在另一个原始Rmarkdown脚本中不起作用。仅在包含以下要跳过执行的代码的代码段之后,才实现跳过Rmd文件的一部分。
<!--
# Comment section starts
```{r, include=FALSE}
knitr::opts_chunk$set(eval= FALSE)
```
This …Run Code Online (Sandbox Code Playgroud) 我是R和SVM的新手,我正试图svm从e1071包中分析功能.但是,我找不到任何大型数据集,这些数据集允许我获得改变输入数据大小的良好分析范围.有谁知道怎么锻炼svm?我应该使用哪个数据集?任何特定的参数svm使它更难工作?
我复制了一些用于测试性能的命令.也许最有用也更容易得到我在这里尝试的东西:
#loading libraries
library(class)
library(e1071)
#I've been using golubEsets (more examples availables)
library(golubEsets)
#get the data: matrix 7129x38
data(Golub_Train)
n <- exprs(Golub_Train)
#duplicate rows(to make the dataset larger)
n<-rbind(n,n)
#take training samples as a vector
samplelabels <- as.vector(Golub_Train@phenoData@data$ALL.AML)
#calculate svm and profile it
Rprof('svm.out')
svmmodel1 <- svm(x=t(n), y=samplelabels, type='C', kernel="radial", cross=10)
Rprof(NULL)
Run Code Online (Sandbox Code Playgroud)
我不断增加数据集重复行和列,但我达到了内存的限制,而不是让svm工作更难...
我整个上午都在尝试这个,在阅读stackoverflow上的相关帖子后仍然无法找到解决方案
我有以下代码:
names <- colnames(df[17:length(df)])
counter = 17L
for (i in 1:length(names)) {
df.tax <- subset(df, df[,c(counter)] != 0)
counter = counter + 1L
meta <- subset(df.tax, select=c(1:16))
meltmeta <- melt(meta, id=c("Collector", "Year","Week","Cities","Provinces"))
ppv <- ggplot(meltmeta, aes(title = paste(names[i]), factor(Provinces), value))
ppv + geom_boxplot() + geom_boxplot(aes(fill=Collector), alpha=I(0.5)) + geom_point(aes(color=Collector), size=1) +facet_wrap(~variable, scale="free")
ggsave(file = paste(names[i], sep=".","provinces_vs_climate.pdf"), width=16, height=8)
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,我无法为ggplot添加正确的标题.在for循环的每次迭代中,我通过对df的部分进行子集生成一个名为df.tax的新数据帧.我融化了df然后尝试使用ggplot生成一个图.
我设法在ggsave的每次迭代中使用不同的文件名(基于名称数组)保存每个绘图,但ggplot只是为每个绘图生成标题"paste(names [i])".
我试过,get(),paste(),labs()等等,但都没有用
有谁知道如何解决这个问题?
我有一个数据框 DF,下面显示了两列 A 和 B:
A B
1 0
3 0
4 0
2 1
6 0
4 1
7 1
8 1
1 0
Run Code Online (Sandbox Code Playgroud)
执行滑动窗口方法,如下所示。在大小为 3 的滑动窗口中计算列 B 的平均值,使用:rollapply(DF$B, width=3,by=1) 滑动 1。每个窗口的平均值显示在左侧。
A: 1 3 4 2 6 4 7 8 1
B: 0 0 0 1 0 1 1 1 0
[0 0 0] 0
[0 0 1] 0.33
[0 1 0] 0.33
[1 0 1] 0.66
[0 1 1] 0.66
[1 1 1] 1
[1 1 0] …Run Code Online (Sandbox Code Playgroud) 我想知道为什么我不能将 is.infinite() 应用于数据帧,就像将 is.na 应用于 R 中的数据帧一样:
data[is.infinite(data)]<-0
Error in is.infinite(data) :
default method not implemented for type 'list'
data[is.na(data)] <-0
Run Code Online (Sandbox Code Playgroud)
不会产生错误,但是,is.infinite 上的文档暗示与 is.na? 具有相同的行为。
有谁知道我如何替换 inf 值?
我想,以取代值c t,o p列b有c_t,o_p分别。我已经使用以下方法完成了任务。
d <- data.frame(a = c(5,6,3,7,4,3,8,3,2,7),
b = c('c t','c_t','d','o p','o_p','c m','c_t','d','o t','o_p'))
# Way-1
d %>%
mutate(b = replace(b, b == 'c t', 'c_t')) %>%
mutate(b = replace(b, b == 'o p', 'o_p'))
# Way-2
d %>% mutate(b = replace(b, b == 'c t', 'c_t'),
b = replace(b, b == 'o p', 'o_p'))
Run Code Online (Sandbox Code Playgroud)
输出:
# a b
# 1 5 c_t
# 2 6 c_t
# 3 …Run Code Online (Sandbox Code Playgroud) 的最大可接受值是多少fig.width?看起来传递超过 12 的值是无效的。我一直在测试 HTML 输出的图形高度和宽度的不同值。我确保宽度值始终不小于高度。
假设我有一个y具有n个级别的因子变量,我可以获得预测和实际结果.如何构建混淆矩阵?
set.seed(12345)
y_actual = as.factor(sample(c('A','B', 'C', 'D', 'E'), 100, replace = TRUE))
set.seed(12346)
y_predict = as.factor(sample(c('A','B', 'C', 'D', 'E'), 100, replace = TRUE))
Run Code Online (Sandbox Code Playgroud)
对于n = 2的情况,已经回答了这个问题
我尝试了什么
这是我得到了多远
ones = data.frame(total = rep(1,100));
confusion = aggregate(ones, list(Prediction = predict, Reality = real), sum, a.action=0)
confusion
Prediction Reality total
1 A A 12
2 B A 5
3 C A 15
4 A B 15
5 B B 7
6 C B 8
7 A C 12
8 …Run Code Online (Sandbox Code Playgroud) 我正在使用大型数据框.我正在尝试根据两个当前向量中存在的条件创建一个新向量.
鉴于数据集的大小(及其一般的真棒)我试图找到使用dplyr的解决方案,这导致我变异.我觉得我并不遥远,但我只是无法找到坚持不懈的解决方案.
我的数据框类似于:
ID X Y
1 1 10 12
2 2 10 NA
3 3 11 NA
4 4 10 12
5 5 11 NA
6 6 NA NA
7 7 NA NA
8 8 11 NA
9 9 10 12
10 10 11 NA
Run Code Online (Sandbox Code Playgroud)
要重新创建它:
ID <- c(1:10)
X <- c(10, 10, 11, 10, 11, NA, NA, 11, 10, 11)
Y <- c(12, NA, NA, 12, NA, NA, NA, NA, 12, NA)
Run Code Online (Sandbox Code Playgroud)
我想从现有数据创建一个新的向量'Z'.如果Y> X,那么我希望它从Y返回值.如果Y是NA,那么我希望它返回X值.如果两者都是NA,那么它应该返回NA.
到目前为止,我尝试使用下面的代码让我创建一个满足第一个条件但不是第二个条件的新向量.
newData <- data …Run Code Online (Sandbox Code Playgroud)