我有这样的功能:
remove_outliers<-function(x){
qnt<- quantile(x,probs=0.99)
y<- x
y[x>qnt]<- NA
y}
Run Code Online (Sandbox Code Playgroud)
目的是删除位于数据顶部1%的异常值(用NA替换它们的值).如何在因子变量的各个级别上应用此功能?
例如,
A组和B组的原始数据集:
group share
A 100
A 50
A 30
A 10
... ...
B 100
B 90
B 80
B 60
... ...
Run Code Online (Sandbox Code Playgroud)
应该像这样结束:
group share
A NA
A 50
A 30
A 10
... ...
B NA
B 90
B 80
B 60
... ...
Run Code Online (Sandbox Code Playgroud)
我已经试过了,但是这些都改变了数据集输出的结构.
样本数据:
df <- data.frame(time=c(1,2,3,4,5,6, 7), status=c("good", "good", "good", "bad", "good", "good", "good"))
输出:
time status
1 1 good
2 2 good
3 3 good
4 4 bad
5 5 good
6 6 good
7 7 good
Run Code Online (Sandbox Code Playgroud)
我想添加一个新的statuschangeIF 列status与上面或下面的行不同.输出看起来像这样:
time status statuschange
1 1 good NA
2 2 good TRUE
3 3 good FALSE
4 4 bad FALSE
5 5 good FALSE
6 6 good TRUE
7 7 good NA
Run Code Online (Sandbox Code Playgroud)
我有很多方法可以做到这一点,但我无法弄明白.任何帮助表示赞赏!
我想知道是否有一种内存有效的方式来加入n data.tables(或数据帧).例如,如果我有以下4个data.tables:
df1 = data.table(group = c(1L,2L,3L),value = rnorm(3),key = "group")
df2 = data.table(group = c(2L,1L,3L),value2 = rnorm(3),key = "group")
df3 = data.table(group = c(3L,2L,1L),value3 = rnorm(3),key = "group")
df4 = data.table(group = c(1L,3L,2L),value4 = rnorm(3),key = "group")
Run Code Online (Sandbox Code Playgroud)
我可以像这样合并它们:
merge(df1,merge(df2,merge(df3,df4)))
Run Code Online (Sandbox Code Playgroud)
但这似乎不是一个最佳解决方案.我可能有许多需要合并的data.tables.有没有办法概括上述内容而不将每个连续的合并复制到内存?在data.table之外是否有一种已经被接受的方法可以做到这一点?
我正在使用R来调用mySQL语句,我在语句之外定义变量,例如
foo = 23;
dbGetQuery(con, "select surname from names WHERE age = '.foo.' ;")
Run Code Online (Sandbox Code Playgroud)
但这会返回一个空集,我用Google搜索并尝试'.&foo.' "包含.foo".'.&& foo."'以及许多不同的组合,但它们都不起作用,我认为这应该是一个mysql问题,而不是我遇到的R特定问题,但不确定.通常变量有$值但不在R.
我有数据集:
top100_repository_name month monthly_increase monthly_begin_at monthly_end_with
Bukkit 2012-03 9 431 440
Bukkit 2012-04 19 438 457
Bukkit 2012-05 19 455 474
CodeIgniter 2012-03 15 492 507
CodeIgniter 2012-04 50 506 556
CodeIgniter 2012-05 19 555 574
Run Code Online (Sandbox Code Playgroud)
我使用以下R代码:
library(reshape)
latent.growth.data <- read.csv(file = "LGC_data.csv", header = TRUE)
melt(latent.growth.data, id = c("top100_repository_name", "month"), measured = c("monthly_end_with"))
cast(latent.growth.data, top100_repository_name + month ~ monthly_end_with)
Run Code Online (Sandbox Code Playgroud)
我想用它来创建具有以下结构的数据集:
top100_repository_name 2012-03 2012-04 2012-05
Bukkit 440 457 474
CodeIgniter 507 556 574
Run Code Online (Sandbox Code Playgroud)
但是,当我运行我的代码时,我得到以下输出:
Using monthly_end_with as value column. Use …Run Code Online (Sandbox Code Playgroud) 我有一个列date和列表time_spent.我想为每个日期D找到一段时间内'time_spent'值的总和:(D-7-D),即.过去一周+当天.
我无法找到一种方法来做到这一点,因为我只能找到总和的例子而不是可变时间段的总和.
这是一个数据集示例:
CREATE TABLE rolling_total
(
date date,
time_spent int
);
INSERT INTO rolling_total VALUES ('2013-09-01','2'),
('2013-09-02','1'),
('2013-09-03','3'),
('2013-09-04','4'),
('2013-09-05','2'),
('2013-09-06','5'),
('2013-09-07','3'),
('2013-09-08','2'),
('2013-09-09','1'),
('2013-09-10','1'),
('2013-09-11','1'),
('2013-09-12','3'),
('2013-09-13','2'),
('2013-09-14','4'),
('2013-09-15','6'),
('2013-09-16','1'),
('2013-09-17','2'),
('2013-09-18','3'),
('2013-09-19','4'),
('2013-09-20','1'),
('2013-09-21','6'),
('2013-09-22','5'),
('2013-09-23','3'),
('2013-09-24','1'),
('2013-09-25','5'),
('2013-09-26','2'),
('2013-09-27','1'),
('2013-09-28','4'),
('2013-09-29','3'),
('2013-09-30','2')
Run Code Online (Sandbox Code Playgroud)
结果如下:
date | time_spent | rolling_week_total
2013-09-01 | 2 | 2
2013-09-02 | 1 | 3
2013-09-03 | 3 | 6
2013-09-04 | 4 | 10
2013-09-05 | 2 | …Run Code Online (Sandbox Code Playgroud) 我可以使用像这样的索引重新排序因子的级别
factor(iris$Species,levels(iris$Species)[c(3:1)])
Run Code Online (Sandbox Code Playgroud)
但是,如果我尝试按名称重新排序相同的因子,它不起作用:
factor(iris$Species,levels(iris$Species)[c("virginica", "versicolor", "setosa")])
Run Code Online (Sandbox Code Playgroud)
有没有办法使用他们的名字重新排序因子的级别?
我知道很多帖子已经回答了像我这样的类似问题,但我已经尝试了两天了,似乎我在这里没有看到图片......
\n\n我得到的 csv 文件如下所示:
\n\nWerteformat: wertabh. (Q)\nWerte: \n01.01.76 00:00 0,363\n02.01.76 00:00 0,464\n...\n31.12.10 00:00 1,03\n01.01.11 00:00 L\xc3\xbccke\nRun Code Online (Sandbox Code Playgroud)\n\n我想用数据创建时间线,但无法正确导入 csv。
\n\n到目前为止我已经尝试过:
\n\ndata<-read.csv2(file, \n header = FALSE, \n sep = ";", \n quote="\\"", \n dec=",", \n col.names=c("Datum", "Abfluss"), \n skip=2, \n nrows=length(strs)-2, \n colClasses=c("date","numeric"))`\nRun Code Online (Sandbox Code Playgroud)\n\n但后来我明白了
\n\n"Fehler in scan(file, what, nmax, sep, dec, quote, skip, nlines, na.strings, : \n scan() erwartete \'a real\', bekam \'L\xef\xbf\xbdcke\'"\nRun Code Online (Sandbox Code Playgroud)\n\n所以我删除了 colClasses 并且它起作用了,我删除了所有不需要的行。但是:一切都是因素。所以我使用 as.numeric
\n\nAbfluss1<-as.numeric(data$Abfluss)\nRun Code Online (Sandbox Code Playgroud)\n\n知道我可以用 Abfluss 1 进行计算,但这些值与原始 …
我有一个数据框如下.
test <- data.frame (myrank = c(0.9629,0.1296), poster = c("dial","bear"))
test
## myrank poster
## 1 0.9629 dial
## 2 0.1296 bear
Run Code Online (Sandbox Code Playgroud)
我有一个ifelse函数如下,但它只返回一个值,我无法弄清楚为什么.
color <- function (x){
x$colorchip <- ifelse((((x$myrank> 0) | (x$myrank= 0)) & x$myrank < 0.143),
"#FF0000",
ifelse((x$myrank > 0.143 & x$myrank < 0.286),
"#FF1919",
ifelse((x$myrank > 0.286 & x$myrank < 0.428571),
"#FF3333",
ifelse((x$myrank > 0.428571 & x$myrank < 0.571429),
"#FFFFFF",
ifelse((x$myrank > 0.571429 & x$myrank < 0.714286),
"#3333D6",
ifelse((x$myrank > 0.714286 & x$myrank < 0.857143),
"#1919D1",
"#0000CC" …Run Code Online (Sandbox Code Playgroud) 请你帮助我好吗?
我是C的初学者,我的代码不起作用.
我正在尝试确定最大的素数因子600851475143,当我运行代码时,它什么也没做.尝试使用较小的数字然而有效.
long i;
for (i = 600851475143; i > 1; i--)
{
if (600851475143 % i == 0)
{
printf("%d\n", i);
}
};
Run Code Online (Sandbox Code Playgroud) r ×8
r-factor ×3
mysql ×2
c ×1
csv ×1
data.table ×1
for-loop ×1
if-statement ×1
numeric ×1
percentile ×1
reshape ×1
sql ×1
sum ×1
variables ×1