这是我第一次发帖,所以如果我没有正确理解,我会道歉。我一直在阅读很多以前的帖子,但仍然无法弄清楚我的合并和替换问题。
我需要将多个检测历史与替换合并。这些数据帧的大小相等(80条记录和25列)。每张表的第1-12列描述了站点,并为每个数据框包含相同的值。第13-25列包含给定站点的检测/非检测数据的响应变量。检测列中的值可以是NA,0或1.合并时,我需要将NAs替换为任意0或1值,将0值替换为任意1个值。基本上,1> 0> NA。
我试图说明下面合并的目标。
例如,如果我想合并/替换下面的df1和df2 ......
df1 d1 d2 d3
site1 0 1 1
site2 0 NA NA
site3 0 0 0
site4 1 NA NA
df2 d1 d2 d3
site1 0 0 NA
site2 0 1 0
site3 0 0 NA
site4 1 0 NA
我最终需要......
df3 d1 d2 d3
site1 0 1 1
site2 0 1 0
site3 0 0 0
site4 1 0 NA
建议的代码将不胜感激,谢谢你的时间!
答案 0 :(得分:1)
你走了:
以数据框为例:
df2[is.na(df2)] = df1[is.na(df2)]
df2[df1>df2 & !is.na(df1)] = df1[df1>df2 & !is.na(df1)]
使用此:
> df2
d1 d2 d3
1 0 1 1
2 0 1 0
3 0 0 0
4 1 0 NA
结果:
string localIP;
try
{
using (Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.IP))
{
socket.Connect("8.8.8.8", 65530);
IPEndPoint endPoint = socket.LocalEndPoint as IPEndPoint;
localIP = endPoint.Address.ToString();
}
}
catch (Exception ex)
{
localIP = String.Empty;
}
return localIP;
这将使用df1中的值替换df2中的所有NA。然后它将在df1较大但不是NA的那些地方用0替换0。
答案 1 :(得分:1)
我认为你可以用一个简单的pmax
(并行最大值)得到它。它最自然地适用于矩阵,而不是数据帧。使用@R Schifini的数据:
pmax(as.matrix(df1), as.matrix(df2), na.rm = T)
# d1 d2 d3
# [1,] 0 1 1
# [2,] 0 1 0
# [3,] 0 0 0
# [4,] 1 0 NA