从表中读取数字并将结果写入R中的新表中?

时间:2015-08-02 08:16:14

标签: r csv binary decimal

我将使用此脚本将许多十进制数转换为二进制数:(例如,这里:1073956868)

#include<iostream>

#include<memory>

using namespace std;

class Test
{
public:
    Test(int a = 0 ) : m_a(a)
    {
    }
    ~Test( )
    {
        cout<<"Calling destructor"<<endl;
    }

    int m_a;
};


//***************************************************************
void Fun(std::unique_ptr<Test> p1 )
{
    cout<<p1->m_a<<endl;
}
//***************************************************************
int  main( )
{
    std::unique_ptr<Test> p( new Test(5) );
    Fun(std::move(p));
    cout<<p->m_a<<endl;

    return 0;
}

参考:Converting decimal to binary in R?

它有效,但我需要R从表中读取x <- 1073956868 y <- intToBits(x) z <- paste(sapply(strsplit(paste(rev(y)),""),`[[`,2),collapse="") print (z) "01000000000000110100100000000100" write.table(z, file = 'test.csv', row.names=FALSE,col.names=FALSE) 值(此处:Book1.csv和C列)。

所以,我添加了这个脚本:

x

在此之后我应该写什么,以使R能够完成这些工作:

1-从Book1.csv文件(C列)中读取setwd("F:/test") data1 <- read.table(file="F:/test/Book1.csv", header=T, sep=",") data1 attach(data1) 值。

2-使用上面的脚本将所有x值转换为二进制值。

3-最后,保存test.csv中的每个x值。

=============================================== =========================

修改:

我很感激你的时间@Daniel。

这是我在R-Studio中运行的脚本:

z

这是控制台

中的输出
setwd("F:/test")
data1 <- read.table(file="F:/test/Book1.csv", header=T, sep=",")
data1
attach(data1)
x <- data1[, 2]
x
newvar <- c()
for (y in x) newvar <- c(newvar, 
                         paste(sapply(strsplit(paste(rev(intToBits(as.raw(y)))), ""),
                                      `[[`, 2),
                               collapse = ""))
newvar
write.csv(newvar, file = "test.csv")

我似乎正确地使用了您的脚本,但我不知道为什么结果中会显示此错误:

> data1
     row         QC    
1  34952 1073741825
2  34959 1073956868 
3  35012 1075585053   
4  35019 1075800097     
5  35063 1077151797      
6  63351 1946172419   
7  63411 1948015647     
8  65126 2000701251    
9  65186 2002544479     
10 65237 2004111223       
11 65535 2013265923      

> x
 [1] 1073741825 1073956868 1075585053 1075800097 1077151797 1946172419 1948015647 2000701251 2002544479 2004111223 2013265923

> newvar <- c()

> for (y in x) newvar <- c(newvar,
+ paste(sapply(strsplit(paste(rev(intToBits(as.raw(y)))), ""),
+ `[[`, 2),
+ collapse = ""))

There were 11 warnings (use warnings() to see them)

> newvar
 [1] "00000000000000000000000000000000" "00000000000000000000000000000000" "00000000000000000000000000000000" "00000000000000000000000000000000"
 [5] "00000000000000000000000000000000" "00000000000000000000000000000000" "00000000000000000000000000000000" "00000000000000000000000000000000"
 [9] "00000000000000000000000000000000" "00000000000000000000000000000000" "00000000000000000000000000000000"
> write.csv(newvar, file = "test.csv")

这些是警告列表:

There were 11 warnings (use warnings() to see them)

我更改了R的版本,但仍然存在错误。 您使用的是哪个版本的R?

1 个答案:

答案 0 :(得分:0)

您必须在下面的示例中定义start-endrow和endrow以及列索引,否则,如果您想要列的所有值,只需指定列索引:

# specify row and column index here
x <- data1[startrow:endrow, column]

以下是您的数据的可重现示例,其中假设x具有数据框列中的值:

x <- c(1073741825, 1073956868, 1075585053, 1075800097, 1077151797, 1946172419, 
       1948015647, 2000701251, 2002544479, 2004111223, 2013265923)
newvar <- c()
for (y in x) newvar <- c(newvar, 
                         paste(sapply(strsplit(paste(rev(intToBits(y))), ""),
                                      `[[`, 2),
                               collapse = ""))
newvar
write.csv(data.frame(int = x, bin = newvar), file = "test.csv")

将所有转换后的二进制值连接起来并保存在newvar中。然后使用write.csv将原始值和转换后的二进制数保存到磁盘。

注意:如果整数过大,as.raw似乎无效。但是,您可以简单地省略它并将值直接转换为intToBits的位。