我已经编写了下面的代码来生成一个矩阵,其中包含对我来说相当复杂的模式.在这种情况下,我通过反复试验确定完成矩阵中有136行.
我可以编写一个函数来预先计算矩阵行的数量,但函数会有点复杂.在该示例中,矩阵中的行数=((4*3 + 1)+(3*3 + 1)+(2*3 + 1)+(1*3 + 1))*4.
有没有一种简单有效的方法在R中创建矩阵而不用硬连接矩阵语句中的行数?换句话说,是否有一种简单的方法让R在使用for循环时根据需要简单地向矩阵添加一行?
我提出了一个解决方案,每次通过循环使用rbind,但这似乎有点复杂,我想知道是否有一个更容易的解决方案.
对不起,如果这个问题与之前的问题有关.我无法使用本网站上的搜索功能或今天使用互联网搜索引擎找到类似的问题,尽管我认为我在过去的某处发现过类似的问题.
下面是2组示例代码,一组使用rbind,另一组使用试验和错误预先设置nrow = 136.
谢谢你的任何建议.
v1 <- 5
v2 <- 2
v3 <- 2
v4 <- (v1-1)
my.matrix <- matrix(0, nrow=136, ncol=(v1+4) )
i = 1
for(a in 1:v2) {
for(b in 1:v3) {
for(c in 1:v4) {
for(d in (c+1):v1) {
if(d == (c+1)) l.s = 4
else l.s = 3
for(e in 1:l.s) {
my.matrix[i,c] = 1
if(d == (c+1)) my.matrix[i,d] = (e-1)
else my.matrix[i,d] = …Run Code Online (Sandbox Code Playgroud) 我正在使用文本格式读取数据文件readLines.第一个"列"是我不需要的复杂文本.下一列包含我需要的数据.第一个"列"和数据用冒号(:)分隔.我希望在第一个冒号处拆分每一行并删除生成的文本字符串,仅保留数据.
下面是一个示例数据文件.一个潜在的复杂因素是一行数据包含多个冒号.这条线可能在某些时候成为我的标题.所以,我可能不应该在每个结肠处分开,只是在第一个结肠处.
my.data <- "first string of text..: aa : bb : cc
next string ........ : 2 0 2
third string......1990: 7 6 5
last string : 4 2 3"
my.data2 <- readLines(textConnection(my.data))
my.data2
Run Code Online (Sandbox Code Playgroud)
我试过这里提供的代码:
和这里:
上面第一个链接的代码似乎只在第一行的第一个冒号处分开.第二个链接的代码可能会做我想要的,但对我来说太复杂到目前为止无法成功修改它.
这是我希望获得的数据,此时我可以使用一个非常简单的gsub语句简单地用空格替换第一行中剩余的冒号:
aa : bb : cc
2 0 2
7 6 5
4 2 3
Run Code Online (Sandbox Code Playgroud)
很抱歉,如果这是我未找到的帖子的副本,感谢您提供任何建议或帮助.
我希望my.string用14个零替换前14个点region = 2.所有其他点应该保持原样.
df.1 = read.table(text = "
city county state region my.string reg1 reg2
1 1 1 1 123456789012345678901234567890 1 0
1 2 1 1 ...................34567890098 1 0
1 1 2 1 112233..............0099887766 1 0
1 2 2 1 ..............2020202020202020 1 0
1 1 1 2 ..............00.............. 0 1
1 2 1 2 ..............0987654321123456 0 1
1 1 2 2 ..............9999988888777776 0 1
1 2 2 2 ..................555555555555 0 1
", sep = "", header …Run Code Online (Sandbox Code Playgroud) 我有两个数据帧.One(df1)包含所有感兴趣的列和行,但包含缺少的观察值.另一个(df2)包括用于代替缺失观察的值,并且仅包括至少NA存在一个的列和行df1.我想以某种方式合并两个数据集来获得desired.result.
这似乎是一个非常简单的问题需要解决,但我正在画一个空白.我无法merge上班.也许我可以写嵌套for-loops,但还没有这样做.我也试过aggregate几次.我有点害怕发布这个问题,担心我的R卡可能会被撤销.对不起,如果这是重复的.我在这里搜索并与Google进行了相当密集的搜索.谢谢你的任何建议.碱的溶液R是优选的.
df1 = read.table(text = "
county year1 year2 year3
aa 10 20 30
bb 1 NA 3
cc 5 10 NA
dd 100 NA 200
", sep = "", header = TRUE)
df2 = read.table(text = "
county year2 year3
bb 2 NA
cc NA 15
dd 150 NA
", sep = "", header = TRUE)
desired.result = …Run Code Online (Sandbox Code Playgroud) 我想在最后一个字母和第一个数字之间拆分字符串:
dat <- read.table(text = "
x y
a1 0.1
a2 0.2
a3 0.3
a4 0.4
df1 0.1
df2 0.2
df13 0.3
df24 0.4
fcs111 0.1
fcs912 0.2
fcs113 0.3
fcsb8114 0.4",
header=TRUE, stringsAsFactors=FALSE)
desired.result <- read.table(text = "
x1 x2 y
a 1 0.1
a 2 0.2
a 3 0.3
a 4 0.4
df 1 0.1
df 2 0.2
df 13 0.3
df 24 0.4
fcs 111 0.1
fcs 912 0.2
fcs 113 0.3
fcsb 8114 0.4",
header=TRUE, stringsAsFactors=FALSE) …Run Code Online (Sandbox Code Playgroud) stackoverflow.com上没有上传照片的用户在他们的照片区域中有一个图像模式.这些很简单但对所有用户都不同,这非常令人印象深刻.每个都有一个中央正方形和外边框,两者通常都充满了图案.是否可以使用这些图像模式的代码或如何创建它们?它们可以在R中创建吗?
我希望逐行获得平均日期,其中每行包含两个日期.最终我找到了一种方法,发布在下面.但是,我使用的方法似乎相当麻烦.有没有更好的办法?
my.data = read.table(text = "
OBS MONTH1 DAY1 YEAR1 MONTH2 DAY2 YEAR2 STATE
1 3 6 2012 3 10 2012 1
2 3 10 2012 3 20 2012 1
3 3 16 2012 3 30 2012 1
4 3 20 2012 4 8 2012 1
5 3 20 2012 4 9 2012 1
6 3 20 2012 4 10 2012 1
7 3 20 2012 4 11 2012 1
8 4 4 2012 4 5 2012 1
9 4 …Run Code Online (Sandbox Code Playgroud) 是否可以使用write.table格式化输出?
我可以使用tab来左对齐列sep = '\t',并且可以使用两个选项卡增加列之间的间距sep = '\t\t'.
理想情况下,我希望能够右对齐列并使用中间数量的间距,而不是'\ t'和'\ t\t'提供的间距.使用类似的东西会sep = '\t '破坏列对齐.
我必须证明从使用多种不同表格格式的许多不同文件中提取的大量数据.将R的输出文本文件的列间距与原始pdf文档中的列间距紧密匹配将大大提高校对的速度和准确性.
# example data to write to text file
aa = matrix(c(1000,110,10,1,
0,2000,20,2,
30,300,3000,30000), nrow=3, byrow=TRUE,
dimnames = list(NULL, c("C1", "C2", "C3","C4")))
aa
# left align columns using a tab
write.table(aa,file="c:/users/mark w miller/simple r programs/formatted_tablea.txt", na = 'NA', sep = '\t',
row.names = F, col.names = F)
# 1000 110 10 1
# 0 2000 20 2
# 30 300 3000 30000 …Run Code Online (Sandbox Code Playgroud) 我想在前两个冒号上拆分一列字符串,但不要在任何后续冒号上拆分:
my.data <- read.table(text='
my.string some.data
123:34:56:78 -100
87:65:43:21 -200
a4:b6:c8888 -300
11:bbbb:ccccc -400
uu:vv:ww:xx -500', header = TRUE)
desired.result <- read.table(text='
my.string1 my.string2 my.string3 some.data
123 34 56:78 -100
87 65 43:21 -200
a4 b6 c8888 -300
11 bbbb ccccc -400
uu vv ww:xx -500', header = TRUE)
Run Code Online (Sandbox Code Playgroud)
我进行了广泛的搜索,以下问题最接近我目前的困境:
谢谢你的任何建议。我更喜欢使用基础 R。
编辑:
第一个冒号之前的字符数并不总是两个,前两个冒号之间的字符数也不总是两个。所以,我编辑了这个例子来反映这一点。
我可以编写一个R脚本来打开并运行文件夹中的每个R文件吗?
我知道如何检查文件夹中是否存在文件,如何将文件夹中的每个文件作为文本连接读取以及如何读取文件夹中的每个数据文件.
但是,我希望一次一个地执行一个文件夹中的每个R脚本,理想情况下使用单个R脚本和安装期间安装在Windows桌面上的默认R gui.
我怀疑我可能需要从命令行运行R而是编写某种批处理文件来执行此操作.我很少从命令行运行R,也从未为R编写批处理文件.
以下是一些示例R脚本,它们都存储在名为的文件夹中run_all_these:
该文件run.one.r包含:
a <- 10
b <- 20
c <- a+b
c
Run Code Online (Sandbox Code Playgroud)
该文件run.two.r包含:
a <- 10
b <- 20
c <- a-b
c
Run Code Online (Sandbox Code Playgroud)
该文件run.three.r包含:
a <- 10
b <- 20
c <- a*b
c
Run Code Online (Sandbox Code Playgroud)
该文件run.four.r包含:
a <- 10
b <- 20
c <- a/b
c
Run Code Online (Sandbox Code Playgroud)
我使用谷歌几乎没有发现这个话题.虽然,我确实在这里找到了一些批处理文件:
http://cran.r-project.org/bin/windows/base/rw-FAQ.html
我的实际R脚本将在运行时各自创建自己的输出文件.所以,我现在主要关心的是运行R脚本.虽然下一步是打开每个R脚本,但是a从更改10为100并再次运行它们.也许这应该是一个后续职位.
谢谢你的任何建议.
编辑 2013年11月20日:
在与Ricardo Saporta讨论后,我将四个输入文件更改为:
档案run.one.r:
a <- 10 …Run Code Online (Sandbox Code Playgroud)