标签: r-faq

如何制作数据框列表?

如何制作数据框列表以及如何从列表中访问每个数据框?

例如,如何将这些数据框放在列表中?

d1 <- data.frame(y1 = c(1, 2, 3),
                 y2 = c(4, 5, 6))
d2 <- data.frame(y1 = c(3, 2, 1),
                 y2 = c(6, 5, 4))
Run Code Online (Sandbox Code Playgroud)

r list dataframe r-faq

171
推荐指数
7
解决办法
19万
查看次数

错误:在R中找不到函数....

这是一个FAQ问题,所以请尽可能完整.答案是社区答案,如果您认为缺少某些内容,请随时编辑.

这个问题在meta上进行了讨论和批准.

我正在使用R并尝试some.function但我收到以下错误消息:

Error: could not find function "some.function"
Run Code Online (Sandbox Code Playgroud)

这个问题经常出现.当你在R中遇到这种类型的错误时,你怎么解决它?

error-handling r function r-faq

167
推荐指数
6
解决办法
38万
查看次数

我应该使用data.frame还是矩阵?

应该何时使用a data.frame,何时使用matrix

两者都以矩形格式保存数据,因此有时候还不清楚.

有什么时候使用哪种数据类型有一般的经验法则吗?

r matrix dataframe r-faq

149
推荐指数
4
解决办法
9万
查看次数

使用字符串向量输入在dplyr中按多列分组

我试图将我对plyr的理解转移到dplyr,但我无法弄清楚如何按多列分组.

# make data with weird column names that can't be hard coded
data = data.frame(
  asihckhdoydkhxiydfgfTgdsx = sample(LETTERS[1:3], 100, replace=TRUE),
  a30mvxigxkghc5cdsvxvyv0ja = sample(LETTERS[1:3], 100, replace=TRUE),
  value = rnorm(100)
)

# get the columns we want to average within
columns = names(data)[-3]

# plyr - works
ddply(data, columns, summarize, value=mean(value))

# dplyr - raises error
data %.%
  group_by(columns) %.%
  summarise(Value = mean(value))
#> Error in eval(expr, envir, enclos) : index out of bounds
Run Code Online (Sandbox Code Playgroud)

将plyr示例翻译成dplyr-esque语法我错过了什么?

编辑2017:Dplyr已更新,因此可以使用更简单的解决方案.查看当前选择的答案.

r r-faq dplyr

145
推荐指数
7
解决办法
8万
查看次数

汇总/汇总每组的多个变量(例如总和,平均值)

从数据帧,是否有聚集(一个简单的方法sum,mean,max同时等c)中多个变量?

以下是一些示例数据:

library(lubridate)
days = 365*2
date = seq(as.Date("2000-01-01"), length = days, by = "day")
year = year(date)
month = month(date)
x1 = cumsum(rnorm(days, 0.05)) 
x2 = cumsum(rnorm(days, 0.05))
df1 = data.frame(date, year, month, x1, x2)
Run Code Online (Sandbox Code Playgroud)

我想同时按年和月汇总数据框中的变量x1x2变量df2.以下代码聚合x1变量,但是是否也可以同时聚合x2变量?

### aggregate variables by year month
df2=aggregate(x1 ~ year+month, data=df1, sum, na.rm=TRUE)
head(df2)
Run Code Online (Sandbox Code Playgroud)

任何建议将不胜感激.

aggregate r dataframe r-faq data.table

143
推荐指数
6
解决办法
16万
查看次数

将数据框架从宽格式转换为长格式

将我data.frame从宽表转换为长表时遇到一些麻烦.目前它看起来像这样:

Code Country        1950    1951    1952    1953    1954
AFG  Afghanistan    20,249  21,352  22,532  23,557  24,555
ALB  Albania        8,097   8,986   10,058  11,123  12,246
Run Code Online (Sandbox Code Playgroud)

现在我想把它data.frame变成一个长期的data.frame.像这样的东西:

Code Country        Year    Value
AFG  Afghanistan    1950    20,249
AFG  Afghanistan    1951    21,352
AFG  Afghanistan    1952    22,532
AFG  Afghanistan    1953    23,557
AFG  Afghanistan    1954    24,555
ALB  Albania        1950    8,097
ALB  Albania        1951    8,986
ALB  Albania        1952    10,058
ALB  Albania        1953    11,123
ALB  Albania        1954    12,246
Run Code Online (Sandbox Code Playgroud)

我已经看过并尝试了它melt()reshape()功能,因为有些人提出了类似的问题.但是,到目前为止我只得到凌乱的结果.

如果有可能我想用这个reshape() …

r reshape dataframe r-faq

142
推荐指数
7
解决办法
9万
查看次数

if/while(condition)中的错误{:缺少需要TRUE/FALSE的值

我收到此错误消息:

Error in if (condition) { : missing value where TRUE/FALSE needed
Run Code Online (Sandbox Code Playgroud)

要么

Error in while (condition) { : missing value where TRUE/FALSE needed
Run Code Online (Sandbox Code Playgroud)

它是什么意思,我该如何预防呢?

r r-faq

142
推荐指数
2
解决办法
39万
查看次数

将data.frame列格式从字符转换为因子

我想将我的data.frame object(mydf)的某些列的格式(类)从charactor更改为factor.

当我按read.table()功能阅读文本文件时,我不想这样做.

任何帮助,将不胜感激.

r character dataframe r-faq

136
推荐指数
6
解决办法
31万
查看次数

将图例添加到ggplot2折线图中

我对ggplot2中的传说有疑问.我设法在同一图表中绘制三条线,并想要添加使用三种颜色的图例.这是使用的代码

library(ggplot2)    
require(RCurl)

link<-getURL("https://dl.dropbox.com/s/ds5zp9jonznpuwb/dat.txt")
datos<- read.csv(textConnection(link),header=TRUE,sep=";")
datos$fecha <- as.POSIXct(datos[,1], format="%d/%m/%Y")    

temp = ggplot(data=datos,aes(x=fecha, y=TempMax,colour="1")) + 
           geom_line(colour="red") + opts(title="TITULO") +
           ylab("Temperatura (C)") + xlab(" ") + 
           scale_y_continuous(limits = c(-10,40)) + 
           geom_line(aes(x=fecha, y=TempMedia,colour="2"),colour="green") + 
           geom_line(aes(x=fecha, y=TempMin,colour="2"),colour="blue") +
           scale_colour_manual(values=c("red","green","blue"))

temp
Run Code Online (Sandbox Code Playgroud)

和输出

ggplot三行

我想添加一个带有三种颜色的图例和变量的名称(TempMax,TempMedia和TempMin).我试过了

scale_colour_manual
Run Code Online (Sandbox Code Playgroud)

但找不到确切的方法.

遗憾的是,原始数据已从链接网站中删除,无法恢复.但它们来自具有此格式的meteo数据文件

"date","Tmax","Tmin","Tmed","Precip.diaria","Wmax","Wmed"
2000-07-31 00:00:00,-1.7,-1.7,-1.7,-99.9,20.4,20.4
2000-08-01 00:00:00,22.9,19,21.11,-99.9,6.3,2.83
2000-08-03 00:00:00,24.8,12.3,19.23,-99.9,6.8,3.87
2000-08-04 00:00:00,20.3,9.4,14.4,-99.9,8.3,5.29
2000-08-08 00:00:00,25.7,14.4,19.5,-99.9,7.9,3.22
2000-08-09 00:00:00,29.8,16.2,22.14,-99.9,8.5,3.27
2000-08-10 00:00:00,30,17.8,23.5,-99.9,7.7,3.61
2000-08-11 00:00:00,27.5,17,22.68,-99.9,8.8,3.85
2000-08-12 00:00:00,24,13.3,17.32,-99.9,8.4,3.49
Run Code Online (Sandbox Code Playgroud)

r legend ggplot2 r-faq

136
推荐指数
2
解决办法
23万
查看次数

对数据框中组内的行进行编号

使用与此类似的数据框:

set.seed(100)  
df <- data.frame(cat = c(rep("aaa", 5), rep("bbb", 5), rep("ccc", 5)), val = runif(15))             
df <- df[order(df$cat, df$val), ]  
df  

   cat        val  
1  aaa 0.05638315  
2  aaa 0.25767250  
3  aaa 0.30776611  
4  aaa 0.46854928  
5  aaa 0.55232243  
6  bbb 0.17026205  
7  bbb 0.37032054  
8  bbb 0.48377074  
9  bbb 0.54655860  
10 bbb 0.81240262  
11 ccc 0.28035384  
12 ccc 0.39848790  
13 ccc 0.62499648  
14 ccc 0.76255108  
15 ccc 0.88216552 
Run Code Online (Sandbox Code Playgroud)

我想在每个组中添加一个带编号的列.这样做显然不是使用R的权力:

 df$num <- 1  
 for (i in 2:(length(df[,1]))) {  
   if (df[i,"cat"]==df[(i-1),"cat"]) { …
Run Code Online (Sandbox Code Playgroud)

r dataframe r-faq

136
推荐指数
6
解决办法
8万
查看次数