小编mro*_*opa的帖子

如何修剪前导和尾随空格?

我在data.frame中遇到了前导和尾随空格的麻烦.例如,我想看看在特定rowdata.frame基础上有一定的条件:

> myDummy[myDummy$country == c("Austria"),c(1,2,3:7,19)] 

[1] codeHelper     country        dummyLI    dummyLMI       dummyUMI       
[6] dummyHInonOECD dummyHIOECD    dummyOECD      
<0 rows> (or 0-length row.names)
Run Code Online (Sandbox Code Playgroud)

我想知道为什么我没有得到预期的产量,因为奥地利显然存在于我的国家data.frame.在查看我的代码历史并试图弄清楚出了什么问题后,我尝试了:

> myDummy[myDummy$country == c("Austria "),c(1,2,3:7,19)]
   codeHelper  country dummyLI dummyLMI dummyUMI dummyHInonOECD dummyHIOECD
18        AUT Austria        0        0        0              0           1
   dummyOECD
18         1
Run Code Online (Sandbox Code Playgroud)

我在命令中改变的是奥地利之后的另一个空格.

显然会出现更烦人的问题.例如,当我想根据国家/地区列合并两个帧时.一个data.frame用于"Austria "另一个帧"Austria".匹配不起作用.

  1. 有没有一种很好的方式来"显示"我的屏幕上的空白,以便我知道这个问题?
  2. 我可以删除R中的前导和尾随空格吗?

到目前为止,我曾经写过一个Perl删除空格的简单脚本,但如果我可以在R里面以某种方式做到这一点会很好.

whitespace r trim removing-whitespace r-faq

345
推荐指数
10
解决办法
29万
查看次数

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

将我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万
查看次数

将多个data.frames合并为一个带循环的data.frame

我想把merge几个data.frames合二为一data.frame.因为我有一个完整的文件列表,我试图用循环结构来做.

到目前为止,循环方法工作正常.然而,它看起来效率很低,我想知道是否有更快更容易的方法.

这是场景:我有一个包含多个.csv文件的目录.每个文件包含可用作合并变量的相同标识符.由于文件的大小相当大,我想把每个文件一次一个地读入R而不是一次读取所有文件.所以我得到了目录的所有文件,list.files并在前两个文件中读取.之后我用它merge来买一个data.frame.

FileNames <- list.files(path=".../tempDataFolder/")
FirstFile <- read.csv(file=paste(".../tempDataFolder/", FileNames[1], sep=""),
             header=T, na.strings="NULL")
SecondFile <- read.csv(file=paste(".../tempDataFolder/", FileNames[2], sep=""),
              header=T, na.strings="NULL")
dataMerge <- merge(FirstFile, SecondFile, by=c("COUNTRYNAME", "COUNTRYCODE", "Year"),
             all=T)
Run Code Online (Sandbox Code Playgroud)

现在我使用for循环将所有剩余的.csv文件和merge它们放入已存在的文件中data.frame:

for(i in 3:length(FileNames)){ 
ReadInMerge <- read.csv(file=paste(".../tempDataFolder/", FileNames[i], sep=""),
               header=T, na.strings="NULL")
dataMerge <- merge(dataMerge, ReadInMerge, by=c("COUNTRYNAME", "COUNTRYCODE", "Year"),
             all=T)
}
Run Code Online (Sandbox Code Playgroud)

即使它工作得很好我想知道是否有更优雅的方式来完成工作?

loops for-loop r

27
推荐指数
1
解决办法
3万
查看次数

R&Emacs中的弹出窗口

我在使用ES时使用ESS以便留在Emacs中.每当我创建一个绘图时,都会出现一个带有图形的新弹出窗口.这个新窗口似乎是Emacs内部调用的R进程的一部分.因此,新窗口不是缓冲区列表的一部分,似乎位于Emacs环境之外.

R创建的新窗口,包含例如plot()调用的图形或ggplot2/lattice中的各个函数,是否会被强制保留在Emacs环境中?这样该图可用作新的缓冲区.

谢谢!

emacs r ess

8
推荐指数
2
解决办法
3230
查看次数

在MySQL中创建/写入权限

我的SELECT ... INTO OUTFILE声明中遇到了一些许可问题.

当我登录我的数据库并执行简单的导出命令时,例如:

mysql> select * from XYZ into outfile '/home/mropa/Photos/Desktop/TEST.txt';
Run Code Online (Sandbox Code Playgroud)

我得到了回应:

ERROR 1 (HY000): 
Can't create/write to file '/home/mropa/Photos/Desktop/TEST.txt' 
(Errcode: 13)
Run Code Online (Sandbox Code Playgroud)

但是,当我简单地写:

mysql> select * from XYZ into outfile 'TEST.txt';
Query OK, 8287 rows affected (0.73 sec)
Run Code Online (Sandbox Code Playgroud)

该文件将写入目录/var/lib/mysql/XYZ.我查看了/etc/apparmor.d/usr.sbin.mysqldmysql似乎定义了读取和写入权限的文件,但我真的不知道如何修改它.

如何允许自己将mysql表导出到我喜欢的任何目录中?

mysql sql database linux

6
推荐指数
1
解决办法
2万
查看次数

编写R-light方式 - 避免for循环

我正在浏览我的一个.R文件并稍微清理一下我试图更熟悉用r -ight方式编写代码.作为初学者,我最喜欢的出发点之一是摆脱for()循环并尝试将表达式转换为函数式编程形式.所以这是场景:

我正在组装一堆data.frameslist供以后使用.

dataList <- list (dataA,
                  dataB,
                  dataC,
                  dataD,
                  dataE
                  )
Run Code Online (Sandbox Code Playgroud)

现在我想查看每个data.frame的列名并替换某些字符串.例如,我喜欢用"baz"替换每个"foo"和"bar".目前,我正在通过一个for()看起来有点尴尬的循环完成工作.

colnames(dataList[[1]])
[1] "foo"        "code" "lp15"       "bar"       "lh15"  
colnames(dataList[[2]])
[1] "a"        "code" "lp50"       "ls50"       "foo"  

matchVec <- c("foo", "bar")
for (i in seq(dataList)) {
  for (j in seq(matchVec)) {
    colnames (dataList[[i]])[grep(pattern=matchVec[j], x=colnames (dataList[[i]]))] <- c("baz")
  }
}
Run Code Online (Sandbox Code Playgroud)

因为我在这里工作,list我想到了这个lapply功能.我尝试使用该lapply功能处理这项工作似乎都很正常,但只是乍一看.如果我写

f <- function(i, xList) {
  gsub(pattern=c("foo"), replacement=c("baz"), x=colnames(xList[[i]]))
}
lapply(seq(dataList), f, xList=dataList)
Run Code Online (Sandbox Code Playgroud)

最后一行打印出几乎我要找的东西.但是,如果我再看一下dataList中data.frames的实际名称:

lapply (dataList, colnames) …
Run Code Online (Sandbox Code Playgroud)

loops r

4
推荐指数
1
解决办法
2769
查看次数

如何使用Perl正确计算CSV dcoument中的字段长度?

我有一个数据et,喜欢while用Perl脚本做一个简单的操作.以下是数据集中的一个小提取:

"number","code","country","gamma","X1","X2","X3","X4","X5","X6"1,"DZA","Algeria"," 0.01",7.44,47.3,0.46,0,0,0.13 2,"AGO","安哥拉","0.00",6.79,"空",0.21,1,0,0.28 3,"BEN","贝宁" ," - 0.01",7.02,38.9,0.27,1,0,0.05 4,"BWA","博茨瓦纳","0.06",6.28,45.7,0.42,1,0,0.07 5,"HVO","布基纳Faso","0.00",6.15,36.3,0.08,1,0,0.05 6,"BDI","布隆迪","0.00",6.38,41.8,0.18,1,0,0

脚本应计算每个,分隔字段的长度,并将最高值存储到数组中.

但是,保存无法正常工作.这是代码的一部分:

@maxl = map length, @terms;

while(`<INFILE>`) {
$_ =~ s/[\"\n]//g ;
@terms = split/$sep/, $_;
@lengths = map length, @terms;
for($k = 0, $k <= $#terms, $k++) { 
    if($lengths[$k] > $maxl[$k]) {
    $maxl[$k] = $lenghts[$k];
    }
}
print "@lengths\n";
}
Run Code Online (Sandbox Code Playgroud)

现在@maxl使用代码中的早期部分,它使用数据集的第二行.当我使用print命令只是为了看到@maxl我得到的操作的值:

1 3 7 4 4 4 4 1 1 5

while循环中我使用另一个print语句来查看其他值,我得到:

1 …
Run Code Online (Sandbox Code Playgroud)

perl

2
推荐指数
1
解决办法
245
查看次数

将数组转换为哈希值,其中键的值不等长

我喜欢把数组变成哈希.但是,每个键的值长度不等.

可以说我有

my @array = qw( A 0 B 1 2 3 4 c 5 d 6 7);
Run Code Online (Sandbox Code Playgroud)

现在我喜欢使用字母作为键,并且对于每个这样的字母/键,使用以下数字作为它们的值.所以@array应该转变成%hash如下

my %hash = ( A => [0],
             B => [1, 2, 3, 4],
             c => [5],
             d => [6, 7]
    );
Run Code Online (Sandbox Code Playgroud)

对我来说困难的是每个键值的不等长度.

perl

0
推荐指数
1
解决办法
165
查看次数

标签 统计

r ×5

loops ×2

perl ×2

r-faq ×2

database ×1

dataframe ×1

emacs ×1

ess ×1

for-loop ×1

linux ×1

mysql ×1

removing-whitespace ×1

reshape ×1

sql ×1

trim ×1

whitespace ×1