假设我们在目录C:\ R\Data中有文件file1.csv,file2.csv,...和file100.csv,我们希望将它们全部读入单独的数据框(例如file1,file2,...和file100).
这样做的原因是,尽管具有相似的名称,但它们具有不同的文件结构,因此将它们放在列表中并不是很有用.
我可以使用lapply
但返回包含100个数据帧的单个列表.相反,我想在全球环境中使用这些数据框.
如何直接将多个文件读入全局环境?或者,或者,如何将数据框列表的内容解压缩到其中?
从这个其他的这一个问题,一个.我无法在那里实施答案.
限定:
df2 <- data.frame(variable=rep(c("vnu.shr","vph.shr"),each=10),
value=seq(1:20))
Run Code Online (Sandbox Code Playgroud)
情节:
require(ggplot2)
qplot(variable,value, data=df2,geom="boxplot")+
geom_jitter(position=position_jitter(w=0.1,h=0.1))
Run Code Online (Sandbox Code Playgroud)
我想以相反的顺序制作箱形图(例如左侧的一个,依此类推).
我曾尝试使用重新排序的因素的各种方式levels
,ordered
,relevel
,rev
等等,但我似乎根本无法得到正确的语法.
为了复制,我喜欢为每个数据帧保留一个包含元数据的码本.数据码本是:
书面或计算机化列表,提供将包含在数据库中的变量的清晰而全面的描述. Marczyk等(2010)
我想记录变量的以下属性:
- 名称
- 描述(标签,格式,比例等)
- 来源(例如世界银行)
- 源媒体(访问的网址和日期,CD和ISBN,或其他)
- 磁盘上源数据的文件名(合并代码簿时有帮助)
- 笔记
例如,这是我实现的用于记录数据框mydata1中具有8个变量的变量:
code.book.mydata1 <- data.frame(variable.name=c(names(mydata1)),
label=c("Label 1",
"State name",
"Personal identifier",
"Income per capita, thousand of US$, constant year 2000 prices",
"Unique id",
"Calendar year",
"blah",
"bah"),
source=rep("unknown",length(mydata1)),
source_media=rep("unknown",length(mydata1)),
filename = rep("unknown",length(mydata1)),
notes = rep("unknown",length(mydata1))
)
Run Code Online (Sandbox Code Playgroud)
我为我读过的每个数据集写了一个不同的代码簿.当我合并数据帧时,我还将合并其相关代码簿的相关方面,以记录最终数据库.我这样做主要是复制粘贴上面的代码并更改参数.
WinXP-x32,R-2.13.0
亲爱的清单,
我有一个问题(我认为)与Windows和R之间的交互有关.
我正在试图用夏威夷群岛上的数据写一张桌子.这是我的R代码:
library(XML)
u <- "http://en.wikipedia.org/wiki/Hawaii"
tables <- readHTMLTable(u)
Islands <- tables[[5]]
Run Code Online (Sandbox Code Playgroud)
输出是(第一组列):
Run Code Online (Sandbox Code Playgroud)Island Nickname > > Islands Island Nickname > > Location 1 Hawaiʻi[7] The Big
岛屿19°34°N 155°30°W/19.567°N 155.5°W/ 19.567; -155.5 2 Maui [8] The Valley Isle 20°48°N 156°20°W/20.8°N 156.333°W/ 20.8; -156.3333KahoÊ»olawe [9]目标岛20°33°N 156°36°ï»¿/20.55°N 156.6°W/ 20.55; -156.64LÄnaÊ»i [10]菠萝岛20°50°N 156°56°W/20.833°N 156.933°W/ 20.833; -156.9335MolokaÊ»i [11]友情岛21°08°N 157°02°W/21.133°N 157.033°W/ 21.133; -157.033 6Ê»ahu [12]聚集地21°28°N 157°59°W/21.467°N 157.983°W/ 21.467; -157.983 7KauaÊ»i [13] The Garden Isle 22°05'N 159°30°W/22.083°N 159.5°W/ 22.083; -159.5 8NiÊ»ihau [14] The Forbidden …
限定
z<- as.character(c("1_xx xx xxx_xxxx_12_sep.xls","2_xx xx xxx_xxxx_15_aug.xls"))
Run Code Online (Sandbox Code Playgroud)
这样的
> z
[1] "1_xx xx xxx_xxxx_12_sep.xls" "2_xx xx xxx_xxxx_15_aug.xls"
Run Code Online (Sandbox Code Playgroud)
我想创建一个向量w ^这样
> w
[1] "1_12_sep" "2_15_aug"
Run Code Online (Sandbox Code Playgroud)
也就是说,用_分割z的每个元素然后连接元素1,4,5,从后者中删除.xls.
我可以管理拆分部分,但不确定要提供什么功能,例如"
w <- as.character(lapply(strsplit(z,"_"), function(x) ???))
Run Code Online (Sandbox Code Playgroud) 这是Stata在一步中处理的数据分析中的基本问题.
使用时间不变数据(x0)和2000年和2005年的时变数据(x1,x2)创建一个宽数据框:
d1 <- data.frame(subject = c("id1", "id2"),
x0 = c("male", "female"),
x1_2000 = 1:2,
x1_2005 = 5:6,
x2_2000 = 1:2,
x2_2005 = 5:6
)
Run Code Online (Sandbox Code Playgroud)
ST
subject x0 x1_2000 x1_2005 x2_2000 x2_2005
1 id1 male 1 5 1 5
2 id2 female 2 6 2 6
Run Code Online (Sandbox Code Playgroud)
我想像面板一样塑造它,所以数据看起来像这样:
subject x0 time x1 x2
1 id1 male 2000 1 1
2 id2 female 2000 2 2
3 id1 male 2005 5 5
4 id2 female 2005 6 6
Run Code Online (Sandbox Code Playgroud)
我可以用reshape
st 做到这一点 …
限定:
df1 <-data.frame(
id=c(rep(1,3),rep(2,3)),
v1=as.character(c("a","b","b",rep("c",3)))
)
Run Code Online (Sandbox Code Playgroud)
ST
> df1
id v1
1 1 a
2 1 b
3 1 b
4 2 c
5 2 c
6 2 c
Run Code Online (Sandbox Code Playgroud)
我想创建一个第三个变量freq
包含最常见的观察v1
被id
ST
> df2
id v1 freq
1 1 a b
2 1 b b
3 1 b b
4 2 c c
5 2 c c
6 2 c c
Run Code Online (Sandbox Code Playgroud) 假设我有许多.gpx文件(这些文件包含来自Garmin eTrex的GPX航路点数据).我想用不同的名称将它们加载到R中并操纵它们.
我可以这样读一个文件:
library(maptools)
gpx.raw <- readGPS(i = "gpx", f = "file1_w_12_f_ddf.gpx", type="w")
Run Code Online (Sandbox Code Playgroud)
假设我想将其中的一些读入内存.我可以尝试for循环:
files <- list.files(".",pattern = "*.gpx")
for(x in files){
#Create new file name
temp <- strsplit(x,"_",fixed=TRUE)
visit.id <- sapply(temp,FUN=function(x){paste(x[1],x[4],substr(x[5],1,3),sep="_")})
#read file with new filename
assign(visit.id, readGPS(i = "gpx", f = x, type="w"))
}
Run Code Online (Sandbox Code Playgroud)
在程序上运行会产生以下错误:
read.table出错(con < - textConnection(gpsdata),fill = TRUE,...):输入中没有可用的行另外:警告消息:运行命令'C:\ PROGRA~2\GPSBabel\gpsbabel.exe - w -i gpx -f file1_w_12_f_ddf.gpx -o tabsep -F - '状态为1
请注意,我能够自己读取此文件,因此它似乎与文件本身无关,而是在循环中运行readGPS.
一般来说,我仍然觉得R处理像上面的x这样的变量非常困惑.我不知道如何从独立的情况下修改参数readGPS f = "file1_w_12_f_ddf.gpx"
:它应该是x …
使用两个数据帧df1和df2定义列表dats
dats <- list( df1 = data.frame(a=sample(1:3), b = sample(11:13)),
df2 = data.frame(a=sample(1:3), b = sample(11:13)))
> dats
$df1
a b
1 2 12
2 3 11
3 1 13
$df2
a b
1 3 13
2 2 11
3 1 12
Run Code Online (Sandbox Code Playgroud)
我想在每个数据框中删除变量a.接下来,我想添加一个变量,其中包含来自外部数据帧的每个数据帧的id,如:
ids <- data.frame(id=c("id1","id2"),df=c("df1","df2"))
> ids
id df
1 id1 df1
2 id2 df2
Run Code Online (Sandbox Code Playgroud)
为了放弃不必要的变量,我试着没有运气:
> dats <- lapply(dats, function(x) assign(x, x[,c("b")]))
> Error in assign(x, x[, c("b")]) : invalid first …
Run Code Online (Sandbox Code Playgroud) 限定:
df <- data.frame(
line1 = rep(seq(1,5,by=1),2),
line2 = rep(seq(2,6,by=1),2),
index = rep(seq(1,5,by=1),2),
factor=rep(c("a","b"),each=5))
Run Code Online (Sandbox Code Playgroud)
其中line1
和line2
是两个变量,比如身高和体重.
这是我想要的每个面板的简单样式(我还想更改点标记的大小,但不使用如何):
plot(df$line1[df$factor=="a"], type = "o", ylim=c(0,6))
lines(df$line2[df$factor=="a"], type = "o", lty=2, pch=0)
Run Code Online (Sandbox Code Playgroud)
当我尝试这个:
library(lattice)
xyplot(c(line1,line2)~index|factor,data=df,type="o")
Run Code Online (Sandbox Code Playgroud)
该程序将所有点视为属于一行.
此外,我不知道如何提供绘图样式的参数来获得所需的结果.
PS1.令人惊讶的是,我已经用Google搜索并发现了许多散点图(线性拟合,密度等)和格子图的直方图示例,但这不是我想要做的简单事情之一.
PS2.我想标记这个问题,trellis
但没有声誉点来创建标记.有志愿者吗?
我试图让R忽略c:\ users \ name \ documents并完全独立/可移植
这是我的目录结构:
.../R/R-2.1.2.2/...
.../R/r_user/
.../R/libs_site/
Run Code Online (Sandbox Code Playgroud)
我更新了Rprofile.site如下:
# Set the working directory
setwd( file.path( R.home() , ".." , "r_user" ) )
# set the home directory
Sys.setenv(HOME=file.path( R.home() , ".." , "r_user" ) )
# Set the site library folder
.Library.site = file.path( R.home() , ".." , "libs_site" )
Run Code Online (Sandbox Code Playgroud)
当R启动时,我运行.libPaths(),但仍然看到c:/ users / ...
因此,也许R不是按照上面的Sys.setenv更新?解决方案?
限定
df<-read.table(textConnection('egg 1 20 a
egg 2 30 a
jap 3 50 b
jap 1 60 b'))
Run Code Online (Sandbox Code Playgroud)
ST
> df
V1 V2 V3 V4
1 egg 1 20 a
2 egg 2 30 a
3 jap 3 50 b
4 jap 1 60 b
Run Code Online (Sandbox Code Playgroud)
我的数据没有因素,所以我将因子转换为字符:
> df$V1 <- as.character(df$V1)
> df$V4 <- as.character(df$V4)
Run Code Online (Sandbox Code Playgroud)
我希望通过V1保持"折叠"数据框:
请注意这是一个普遍的问题,例如我的数据集要大得多,我可能希望在折叠时使用不同的函数(例如,last,first,min,max,variance,st.dev.等).因此函数参数可能很长.
在这种情况下,我想要输出表单:
> df.collapse
V1 V2 V3 V4
1 egg 2 25 a
2 jap 3 55 b
Run Code Online (Sandbox Code Playgroud)