迭代R中数据帧中的因子

时间:2016-09-09 19:58:05

标签: r variables dataframe

我对R很陌生,并且在特定问题上挣扎。我需要使用从SQL数据库返回的1个变量迭代数据帧,这样我最终可以使用1变量中的信息发出其他SQL查询。我需要帮助了解如何做到这一点。

这就是我所拥有的

> dt
                                   Col
1 5D2D3F03-286E-4643-8F5B-10565608E5F8
2 582771BE-811E-4E45-B770-42A98EB5D7FB
3 4EB4D553-C680-4576-A854-54ED817226B0
4 80D53D5D-80D1-4A60-BD86-C85F6D53390D
5 9EF6CABF-0A4F-4FA9-9FD9-132589CAAC31

尝试使用它时,如上所述打印整个列表

> dt[1]
                               Col
1 5D2D3F03-286E-4643-8F5B-10565608E5F8
2 582771BE-811E-4E45-B770-42A98EB5D7FB
3 4EB4D553-C680-4576-A854-54ED817226B0
4 80D53D5D-80D1-4A60-BD86-C85F6D53390D
5 9EF6CABF-0A4F-4FA9-9FD9-132589CAAC31

当尝试通过dt [1]进行访问时,它会带来额外的不需要的信息。

> a<-dt[1,]
> a
[1] 5D2D3F03-286E-4643-8F5B-10565608E5F8
5 Levels: 4EB4D553-C680-4576-A854-54ED817226B0 ... 9EF6CABF-0A4F-4FA9-9FD9-132589CAAC31

我需要仅隔离&#39; 5D2D3F03-286E-4643-8F5B-10565608E5F8&#39;信息而不是&#39; 5级......&#39;。

我确信这很简单,我无法找到它。任何帮助表示赞赏! 谢谢!

1 个答案:

答案 0 :(得分:1)

您需要解决两个问题。一个是你想要的是字符数据,而不是一个因子变量(一个因子本质上是一个类别变量)。另一个是你想要一个简单的值向量,而不是data.frame

1)要将第一列作为向量,请使用双括号或$表示法:

a <- dt[[1]]
a <- dt[['Col']]
a <- dt$Col

你的符号dt[1,] 确实实际上也将列作为向量返回,但是使用了[ data.frame dt[i,j]方法的默认情况&#34;降&#34;使用双索引表单dt[i]时它对向量的值,但在使用单索引表单[时则不是这样:

  

[[x[i]与单个向量索引(x[[i]]data.frame)一起使用时,它们会将数据框编入索引,就好像它是一个列表一样。在此用法中,将忽略drop参数,并显示警告。

想想&#34;放弃&#34;比如将数据拆箱 - 而不是使用单个列获取a <- as.character(dt[[1]]) a <- as.character(dt[['Col']]) a <- as.character(dt$Col) ,您只需自己获取列数据。

2)要转换为字符数据,请使用@akrun或@Vlo注释中的一条建议:

#!/usr/bin/python
import subprocess
import os

f = open('test', 'r')
for i in f.readlines():
    cmd = '/usr/sbin/nsrmm -d -S ' + i
    cmd1 = cmd.split( )
    print cmd1
    p = subprocess.Popen(cmd1, stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE)
    p.stdin.write('y')

或使用您用于制作SQL查询的API - 或者读取查询结果 - 而不是首先将字符串转换为因子。