更改矩阵中的值

时间:2016-05-12 13:02:08

标签: r recode

我有两个文本文件:ped1.txtped2.txt。字段分隔字符是制表符/空格。

ped1.txt

222 333 444
333 458 458
458 774 556
500K lines...

ped2.txt

222 -12006
333 -11998

对于所有数据,我需要使用文件2中的密钥重新编码文件1中的数字。 结果应该是:

-12006 -11998 444
-11998    458 458
   458    774 556
500K lines...

怎么做? 感谢。

2 个答案:

答案 0 :(得分:0)

import UIKit

class ImageCell: UITableViewCell {

    @IBOutlet weak var urlImageView: UIImageView!
    @IBOutlet weak var loadingStatus: UIActivityIndicatorView!

    override func awakeFromNib() {
        super.awakeFromNib()
    }

    override func setSelected(selected: Bool, animated: Bool) {
        super.setSelected(selected, animated: animated)
    }

    func loadImageFromUrl(url: String, view: UIImageView){
        if view.image == nil {

            self.startLoading()
            // Create Url from string
            let url = NSURL(string: url)!


            // Download task:
            // - sharedSession = global NSURLCache, NSHTTPCookieStorage and NSURLCredentialStorage objects.
            let task = NSURLSession.sharedSession().dataTaskWithURL(url) { (responseData, responseUrl, error) -> Void in
                // if responseData is not null...
                if let data = responseData{

                    // execute in UI thread
                    dispatch_async(dispatch_get_main_queue(), { () -> Void in
                        self.stopLoading()
                        view.image = UIImage(data: data)
                    })
                }
            }

            // Run task
            task.resume()
        } 
    }

    func displayImage(imageUrl: String){

        imageView?.image = nil
        if imageUrl != nil && imageUrl != "" {
            print(imageUrl)

                loadImageFromUrl(imageUrl,view: urlImageView)

        } else {
            loadingStatus.hidden = true
        }
    }

    func startLoading(){
        loadingStatus.hidden = false
        loadingStatus.startAnimating()
    }

    func stopLoading(){
        loadingStatus.hidden = true
        loadingStatus.stopAnimating()
    }
}

你可以这样做:

ped1
#    V1  V2  V3
# 1 222 333 444
# 2 333 458 458
# 3 458 774 556
ped2
#    V1     V2
# 1 222 -12006
# 2 333 -11998

apply(ped1, c(1,2), function(x) ifelse(x %in% ped2$V1, ped2$V2[ped2$V1 == x], x))
#          V1     V2  V3
# [1,] -12006 -11998 444
# [2,] -11998    458 458
# [3,]    458    774 556

取决于您的偏好。

答案 1 :(得分:0)

使用as.vector()将第一个矩阵转换为矢量。

然后使用plyr包中的mapvalues()或者甚至更高效地使用data.table包中的set()方法。 set()方法要求您在转换为vector之后转换为单列data.table。

完成重新编码/替换后,您可以使用方法矩阵(your_new_vector,ncol = original_number_of_cols)转换回矩阵。

玩得开心